设计模式概览

1. 设计模式简介

设计模式是前辈们总结的面向对象编程的最佳实践,使用设计模式是为了可重用代码,让人更容易理解代码,保证代码的可靠性、可扩展性。 设计模式,就是套路,就是功夫,每种功夫可以使我们打倒一类敌人;每种设计模式,可以帮我们解决一类重复出现的问题。有了设计模式,也方便程序员之间切磋技艺。

让我们记住以下四个名字,Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides。1994年,他们出版了一本名为《Design Patterns - Elements of Reusable Object-Oriented Software 》 的书,拉开了软件开发历史上设计模式的大幕。上述四位,有个响亮的江湖称号叫Gang of Four (GOF),听着有点耳熟。

2. 设计模式原则

记住两个java开发的军规,一个是面向接口编程,而不是面向实现;另一个是组合优于继承。 把它们展开来说,就是设计模式遵循的几个原则:
开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则、合成/聚合复用原则。

开闭原则

开闭原则(Open-Closed Principle, OCP):一个类(或者模块)应当尽量对扩展开放,对修改封闭。修改原来代码的逻辑,可能会导致原有的功能出错。 当我们不得不考虑修改原有代码的逻辑,或者扩展起来很痛苦的时候,也可以考虑重构相关代码。

里氏替换原则
里氏替换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方,都必须能替换成其子类的对象。 凡是能用java.util.List的地方,肯定都能用java.util.ArrayList替换。通常情况下,基类是接口或者抽象类,子类实现基类中未实现的方法,编码过程中IDE会帮助我们检查是否符合里氏替换原则;但这是对语法的检查,具体实现还要靠程序员自己注意。

依赖倒置原则
依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。如果你熟悉Spring或者Guice,就应当秒懂了。编程时要面向接口编程,而不是针对实现来编程。我们在A类中调用B接口,那么A类代码里只出现B接口,不出现B接口的实现类,这就需要在A类代码之外的地方(例如配置文件)声明B接口的实现类。

单一职责原则
单一职责原则(SRP:Single responsibility principle):一个类(模块)只承担一种角色,不要在一个类里又连接数据库,又做业务逻辑操作。

接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口。一个接口(角色)只担负一个职责。就像你想要去买台手机,商场非要搭车卖你一口锅,你心里会骂娘的;如果一个接口定义了太多的方法,但实现类不需要那么多,你猜实现类是什么感受。

迪米特法则

迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。它的初衷是降低类和类之间的耦合度。迪米特法则建议一个类只和朋友类交流,朋友类包括出现在成员变量、方法的输入输出参数中的类,而出现在方法体内部的类不属于朋友类。

组合/聚合复用原则

组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP):尽量使用对象组合,而不是通过继承来达到复用的目的。

3. 设计模式分类

《设计模式》一书中共总结了23中设计模式,这些设计模式被分为三类:创建型(Creational)、结构型(Structural)、行为型(Behavioral)。

创建型设计模式提供了一种创建对象的方式,隐藏了创建对象的逻辑,和通过new操作符来创建对象相比,提供了灵活和动态创建对象的可能性。创建型设计模式共有5个。

|序号 | 模式名称 | 英文名称 |链接
|--- |------------|------|----------|-------|
|1 | 单例模式 | Singleton Pattern| http://www.jianshu.com/p/76a31fdc58bf|
|2 | 工厂方法模式 |Factory Method Pattern| http://www.jianshu.com/p/e7e2c46be749|
|3 | 抽象方法模式 |Abstract Factory Pattern| http://www.jianshu.com/p/7710ab882c05|
|4 | 原型模式 |Prototype Pattern | http://www.jianshu.com/p/204eb354f2fa|
|5 | 建造者模式 |Builder Pattern| http://www.jianshu.com/p/c96d517b660a|

结构型设计模式描述如何将类或对象结合在一起形成更大的结构。类可以通过继承或者实现接口的方式形成更大的结构,是静态的;不同的对象可以通过组合在一起实现更大的功能和结构,是动态的。结构型设计模式有7个。

序号 模式名称 英文名称 链接
1 适配器模式 Adapter Pattern http://www.jianshu.com/p/cd1a608b1d45
2 装饰器模式 Decorator Pattern http://www.jianshu.com/p/6977a91f1ffb
3 代理模式 Proxy Pattern http://www.jianshu.com/p/7ef38b4eb260
4 外观模式 Facade Pattern http://www.jianshu.com/p/2afea1141cd6
5 桥接模式 Bridge Pattern http://www.jianshu.com/p/a1e235eebabd
6 组合模式 Composite Pattern http://www.jianshu.com/p/4e70962cc48a
7 享元模式 Flyweight Pattern http://www.jianshu.com/p/dbd03d3a809c

行为型设计模式重点关注对象之间的通信和交流。行为性设计模式有11个。

序号 模式名称 英文名称 链接
1 责任链模式 Chain of Responsibility Pattern http://www.jianshu.com/p/fb9bf1b333d3
2 命令模式 Command Pattern http://www.jianshu.com/p/dac73756f507
3 解释器模式 Interpreter Pattern http://www.jianshu.com/p/8b0fdd5127f9
4 迭代模式 Iterator Pattern http://www.jianshu.com/p/d1a60decc24a
5 中介模式 Mediator Pattern http://www.jianshu.com/p/062a86c01977
6 备忘录模式 Memento Pattern http://www.jianshu.com/p/cd8a9f6dbf54
7 观察者模式 Observer Pattern http://www.jianshu.com/p/78be191023ad
8 状态模式 State Pattern http://www.jianshu.com/p/3628ad39d2bb
9 策略模式 Strategy Pattern http://www.jianshu.com/p/90759e153ac9
10 模版方法模式 Template Method Pattern http://www.jianshu.com/p/4e4b8dabeb87
11 访问者模式 Visitor Pattern http://www.jianshu.com/p/cd17bae4e949

4. 设计模式之间的关系

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

推荐阅读更多精彩内容

  • 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设...
    zjk_00阅读 320评论 0 0
  • 一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式...
    perfect_jimmy阅读 271评论 0 0
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 727评论 0 1
  • 原文链接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤独杂货铺阅读 1,505评论 0 3
  • 设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多...
    霄霄霄霄阅读 893评论 0 1