设计模式-GoF

资源:

  1. 下载GOF的书籍: http://download.csdn.net/download/quanbove/6534569
  2. 这里总结了模式,但讲的并不准确: http://www.runoob.com/design-pattern/design-pattern-intro.html

分类

创建型

结构型

行为型

简单工厂模式(Simple Factory)

工厂方法(Factory Method)

抽象工厂(Abstract Factory)

创建者模式(Builder)

原型模式(Prototype)

单例模式(Singleton)

外观模式(Façade)

适配器模式(Adapter)

代理模式(Proxy)

装饰模式(decorator)

桥接模式(bridge)

组合模式(composite)

享元模式(flyweight)

模板方法(template method)

观察者模式(observer)

状态模式(state)

策略模式(strategy)

职责链模式(chain of responsibility)

命令模式(command)

访问者模式(Visitor)

中介者模式(mediator)

备忘录模式(memento)

迭代器模式(iterator)

解释器模式(interpreter)

clip_image001

设计模式的六大原则

1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

模式介绍

创建型

  1. 抽象工厂Abstract Factory。提供创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类
    clip_image003
  2. Builder。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    clip_image004
    clip_image005
  3. Factory Method。定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。
    clip_image006
  4. Prototype。用原型实例指定创建对象的种类,通过拷贝这个原型来创建新的对象。
    clip_image007
  5. Singleton。保证一个类仅有一个实例,并提供访问它的全局访问点。
    clip_image008

结构型

  1. Adapter。将一个类的接口转换为客户希望的另一个接口,使得原本由于接口不兼容而不能一起使用的类可以一起工作。
    clip_image009
    clip_image010
  2. Bridge。将抽象部分和它的实现部分分离,使它们都可以相互变化。
    clip_image011
  3. Composite。将对象组合成树形结构以表示部分-整体结构。使得客户对单个对象和复合对象的使用具有一致性。
    clip_image012
    clip_image013
  4. Decorator。动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。
    clip_image014
  5. Facade。为子系统的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得这一子系统更易使用。
    clip_image015
  6. Flyweight。运用共享技术有效地支持大量细粒度的对象。
    clip_image016
    clip_image017
  7. Proxy。为其它对象提供一个代理以控制对这个对象的访问。
    clip_image018
    clip_image019

行为型

  1. Chain of Responsibility。为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
    clip_image020
  2. Command。将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
    clip_image021
    clip_image022
  3. Interpreter。给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    clip_image023
  4. Iterator。提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。
    clip_image024
  5. Mediator。用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而达到松耦合,而且可以独立地改变它们之间的交互。
    clip_image025
    clip_image026
  6. Memento。在不破坏封装性的前提下,捕获一个对象的状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到保存的状态。
    clip_image027
    clip_image028
  7. Observer。定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变的时候,所有依赖它的对象都能得到通知并自动刷新。
    clip_image029
    clip_image030
  8. State。允许一个对象在内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
    clip_image031
  9. Strategy。定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。使得算法的变化独立于使用它的客户。
    clip_image032
  10. Template Method。定义一个操作(算法)的骨架,而将一些步骤延迟到子类,使得可以不改变算法的结构即可重定义该算法的特定步骤。
    clip_image033
  11. Visitor。表示一个作用于某对象结构中的各元素的操作,使得可以在不改变各元素的类的前提下,定义作用于这些元素的新操作。
    clip_image034
    clip_image035
原文地址:https://www.cnblogs.com/lingshf/p/5429790.html