创建型模式
ABSTRACT FACTORY---抽象工厂
定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类
使用频率:
使用情景:
HappyFather 和 HapperMother吵架了,HappyFather 回家发现桌子上一张纸条写着“做家务”,于是HappyFather 开始擦地板、刷马桶、收拾房间、做饭,足足忙了好几个小时,终于理解HappyMother的辛苦后主动道歉
情景解释:“做家务”相当于抽象工厂,HappyFather 根据它做一系列相关的家务.
其他应用:在多个产品的系统或者类库中只需调用抽象工厂就可以创建需要实现的子部分
BUILDER---生成器
定义:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。
使用频率:
使用情景:
HappyMother很奇怪为什么HappyFather每次都能够把衣服弄得污渍、汗渍、血渍一团糟,这么脏的衣服要先经过手洗,然后才能放到洗衣机中一起洗
情景解释:一个复杂对象的各个部件分别创建,针对洗衣服这个过程一部分机洗和一部分手洗(复杂的部分)
应用要点:与抽象工厂的区别是其最终只返回一个对象,而抽象工厂返回一系列相关对象
FACTORY METHOD---工厂方法
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method 使一个类的实例化延迟到了子类
使用频率:
使用情景:
每个月1日是Happy 家庆祝的日子,因为这天是HappyFather发工资的日子
HappyFather:“你今天做的饭真香”
HappyMother:“肉多了就香,儿子这50块钱是你这个月的零花钱!”
HappyFather:“记住不许去网吧上网,那个地方总着火”
情景解释:HappyMother 把零花钱给HappySon至于什么时候花,买什么东西就由HappySon自己决定了
PROTOTYPE---原型
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型赖创建新的对象
使用频率:
使用情景:
HappyMother :“每天都要买菜、洗菜、炒菜 ,我烦了不管做了”
HappyFather:“老婆最近超市开始供应蔬菜拼盘,各种蔬菜都已经搭配好了,我去买一盘素三鲜,一盘鱼香肉丝,买回去炒一下就行了,方便的很”
HappyMother:“ I Like It !”
情景解释:各种蔬菜拼盘就是炒菜的原型,炒一下就能吃了
应用要点:PROTOTYPE克隆自身从而创建新的对象
SINGLETON---单件
定义:保证一个类只有一个实例,并提供一个访问他的全局访问点
使用频率:
使用情景:
HappyFather:“乖儿子不许拿这个玩!”
HappySon:“老爸这个是什么呀? ”
HappyFather:“这个呢是咱家的户口本,开始呢只有我的户口页,后来增加了你妈的户口页,后来又增加了你的户口页,以后还会增加你儿子的,儿子的孙子的,子子孙孙的。。。。。。”
情景解释:全家只有一个户口本,通过增加户口页来访问它
其他应用:计数器,购物车
结构型模式
ADAPTER----适配器
定义:将一个类的接口转换成客户希望的另外一个接口,Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
使用频率:
使用情景:
时间:1960年自然灾害期间
HappyMother:“他爸,孩子就要上学了,可一件像样的衣服也没有呀”
HappyFather:“有什么办法呀!饭都吃不饱哪有钱买衣服呀,不然你把我的衣服改一下!”
HappyMother:“Good Idea !” 就这样HappyFather的衣服被改成了HappySon的衣服
情景解释:HappyFather 的衣服通过HappyMother 的裁剪变成了HappySon 的新衣服
的衣服
应用要点:ADAPTER 适用于已经存在的类,但接口不符。
BRIDGE---桥接
定义:将抽象部分与它的实现部分相分离,使他们可以独立的变化
使用频率:
使用情景:
Happy:Mother:“你说负责打扫房间却只管扫地,你说你做饭却叫外卖,你说你每天早上六点打鸣去总用闹表”
HappyFather:“你也知道我总是说一套做一套呀”
情景解释:“说”是抽象部分和“做”相分离
应用要点:抽象和实现部分分别放在独立的类层次结构中
COMPOSITE---组合模式
定义:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性
使用频率:
使用情景:
Happyson 两周岁
HappyMother 告诉HappyFather :“儿子要是闹着不睡觉,你可以给他唱歌,也可以摇晃他,也可以边唱歌边摇晃”
HappySon:“我不要爸爸摇,跟座过山车似的”
情景解释:哄儿子睡觉的方法很多,也可以将几个方法结合使用,所有的方法都可以统一对待
应用要点:组合部分能够像单个对象一样调用,例如遍历树结构。
DECRATOR---装饰
定义:动态的给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活
使用频率:
使用情景:
时间:2003年夏 非典期间
HappyFather:“老婆,你怎么在我的口罩上绣字了呀”
HappyMother:“这样口罩不但可以防病毒还美观呀”
HappyFather:“可为什么要绣上‘别吻我’呀”
HappyMother:“提醒汽车司机不要撞到你呀”
情景解释:为口罩增加了额外的功能
应用要点:将组件嵌入对象而不是使用继承机制
FAÇADE---外观
定义:为子系统中的一组接口提供一致的界面,FAÇADE 提供了一个高层接口,这个接口使得子系统更容易使用
使用频率:
使用情景:
由于HappyFather和HappySon 放纵饮食吃成了两个胖墩,HappyMother 将冰箱锁在一个屋子里,爷俩只能通过HappyMother 才能吃到各种零食。不过HappyMother负责跑腿,爷俩也是不亦舒服。
情景解释:HappyMother 类似于Happy父子拿零食的接口, Happy父子只需吩咐她就行了
应用要点:降低客户程序和子系统的耦合度
FLYWEIGHT—享元
使用频率:
使用情景:
HappyFather:“老婆咱家有没有Flyweight 模式的例子呀”
HappyMother:“老公 什么是Flyweight 模式呀”
HappyFather:“就是运用共享技术有效地支持大量细粒度的对象”
HappyMother:“那杯子算不算呀?可以用来泡茶、泡咖啡、和你打架的时候还可以做暗器”
HappyFather:“。。。 。。。”
模式解释:杯子作为共享对象,可以同时在不同的场景中使用,只是根据它的外部状态,所起的作用不同
应用要点:分离对象的内部和外部状态,根据不同的外部状态应用于不同的场景达到共享对象
PROXY---代理
定义:为其他对象提供一种代理以控制对这个对象的访问
使用频率:
使用情景:
HappySon学校校长办公室
校长:“你要好好教训一下你的儿子,他在学校里面和同学打架了”
HappyFather:“小孩子之间打打闹闹很正常呀”
校长:“和别人打打闹闹正常,可是他把我儿子打哭了”
HappyFather:“啊!对不起,回家我一定好好教训他”
HappyFather 回家后教训HappySon:“我告诉你记住了,下次打谁也不要打校长的儿子”
情景解释:HappyFather 是 HappySon的监护人也就是代理
应用要点:Proxy 只提供对实体的访问,实体定义关键功能。