设计模式概览

2017-02-20  本文已影响92人  郭寻抚

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
上一篇 下一篇

猜你喜欢

热点阅读