24种设计模式的总结

一、创建型: 1.单例模式99%  2.简单工厂模式99% 3.工厂方法模式60% 

5.抽象工厂模式30% 5.建造者模式10% 6.原形模式10%

二、结构型: 代理模式99   装饰器模式99  享元模式90  外观模式60  

适配器模式40   桥接模式20   组合模式30

三、行为型:迭代器模式99 模板方法模式80  策略模式60 

观察者模式40    命令模式20   状态模式20   职责链模式15   解释器模式1   中介者模式10   访问者模式5     备忘录模式5  

一、创建型:

1.1单例模式99%

设计原则:无

常用场景:应用中有对象需要是全局的且唯一

复杂度:低

选择关键点:一个对象在应用中出现多个实例是否会引起逻辑上或者是程序上的错误

逆鳞:在以为是单例的情况下,却产生了多个实例

相关设计模式

原型模式:单例模式是只有一个实例,原型模式每拷贝一次都会创造一个新的实例。

1.2简单工厂模式99%

设计原则:遵循单一职责、违背开闭原则

常用场景:需要在一堆产品中选择其中一个产品

复杂度:低

变化点:产品的种类

选择关键点:一种产品是否可根据某个参数决定它的种类

逆鳞:工厂类不能正常工作

相关设计模式

工厂方法模式:工厂方法模式是简单工厂模式的进一步抽象化,在这两者之间做选择,主要看将工厂进一步抽象化是否有必要,通常情况下,如果工厂的作用仅仅是用来制造产品,则没必要使用工厂方法模式。

1.3工厂方法模式60%

设计原则:遵循单一职责、依赖倒置、开闭原则

常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能

复杂度:中低

变化点:工厂与产品的种类

选择关键点:工厂类和产品类是否是同生同灭的关系

相关设计模式

抽象工厂模式:工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。

二、结构型: 

组合比继承耦合度低,满足“合成复用原则”,对象结构型结构型更灵活

2.1代理模式99   

设计原则:体现功能复用

常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib

复杂度:中高

变化点:静态代理没有变化点,动态代理的变化点为具有相同切入点的类

选择关键点:静态代理选择的关键点是是否要复用被代理的部分功能,动态代理选择的关键点在于能否在将被代理的这一批类当中,找出相同的切入点

逆鳞:切入点的不稳定

相关设计模式

适配器模式:对于适配器模式当中的定制适配器,它与静态代理有着相似的部分,二者都有复用功能的作用,不同的是,静态代理会修改一部分原有的功能,而适配器往往是全部复用,而且在复用的同时,适配器还会将复用的类适配一个接口

2.2.装饰器模式99 

设计原则:遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用

常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加

使用概率:99.99999%

复杂度:中

变化点:动态添加的功能或者说装饰器

选择关键点:添加的功能是否需要动态组装

逆鳞:无

2.3享元模式90 

设计原则:无

常用场景:一些状态相同的对象被大量的重复使用

复杂度:中

变化点:无

选择关键点:被共享的对象是否可以将外部状态提取出来

逆鳞:没有将外部状态提取完全

2.4外观模式60

设计原则:遵循迪米特

常用场景:一个子系统需要对外提供服务

复杂度:中

变化点:无

选择关键点:子系统对外提供服务是否需要依赖很多的类

逆鳞:子系统对外提供的服务的变化或子系统本身的不稳定

相关设计模式

中介者模式:二者都是为了处理复杂的耦合关系,不同的是外观模式处理的是类之间复杂的依赖关系,中介者模式处理的是对象之间复杂的交互关系

三、行为型:

3.1迭代器模式99 

设计原则:遵循迪米特

常用场景:需要迭代访问一个聚合对象中的各个元素,且不暴露该聚合对象内部的表示

复杂度:中

变化点:聚合对象的种类

选择关键点:客户端是否关心遍历的次序

相关设计模式

访问者模式:二者都是迭代的访问一个聚合对象中的各个元素,不同的是,访问者模式中,扩展开放的部分在作用于对象的操作上,而迭代器模式中,扩展开放的部分在聚合对象的种类上,而且二者的实现方式也有着很大的区别。

3.2模板方法模式80  

设计原则:破坏里氏替换,体现功能复用

常用场景:一批子类的功能有可提取的公共算法骨架

复杂度:中低

变化点:算法骨架内各个步骤的具体实现

选择关键点:算法骨架是否牢固

3.3策略模式60 

设计原则:遵循单一职责、依赖倒置、迪米特、开闭原则

常用场景:算法或者策略需要经常替换

变化点:策略种类

选择关键点:客户端是否依赖于某一个或若干个具体的策略

结束语

 99.99999%数字,嵌入JAVA类库或常用框架,比如迭代器模式,ArrayList或者HashSet。

1、看不明白放下,哪天突然明白。(顿悟常发生在洗澡、回家路上)

2、不能改善现有的系统架构,但不要轻易付诸实践。

3、明白UML类图,关联,依赖,聚合,组合

4、写例子,哪怕是比葫芦画瓢,体会使用前后的差异,从扩展性和类(类包括客户端,而不仅仅指设计模式中的角色)职责两个方面。

5、设计模式变化点搞清楚,重要程度高于设计模式的场景、实现方式以及类和对象之间的耦合关系,滥用就是变化点没搞清楚,该变化的没变化,不该变化的经常变化,增加系统负担。

6、经常回过头来看看,不一样体会,体会会越来越深刻,越来越透彻。

7、多研究开源框架,找里面设计模式。

http://www.cnblogs.com/zuoxiaolong/p/pattern26.html

行为型模式 11 种模式

1.模板方法(Template Method)模式:定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

2.策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。

3.命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。

4.职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。

5.状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。

6.观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。

7.中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。

8.迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

9.访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。

10.备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。

11.解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容