GoF设计模式

设计模式简介

设计模式 是对软件设计 普遍存在(反复出现)的各种问题所提出的解决方案。 是由Erich Gamma等人在1990年代从 建筑设计 领域引入到 计算机科学 的。

设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类型 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类型或对象。

GoF设计模式

GoF设计模式分为三种基本类型创建型、结构型和行为型

创建型模式 是有关对象创建的设计模式。 它使对象的创建过程更加具有适应性和动态性。特别是关于创建哪个对象、这些对象如何创建以及它们如何被实例化这些方面,创建型模式可以提供很大的灵活性。

GoF二十三中设计模式中创建型模式有以下几种:

  • Abstract Factory抽象工厂模式)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  • Factory Method工厂方法模式)定义了一个创建对象的接口,但由子类决定实例化哪个类。工厂方法把类的实例化延迟到子类。
  • Builder(生成器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • Prototype原型模式):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  • Singleton单例模式确保一个类只有一个实例,并提供该实例的一个全局访问点。

结构型模式主要关注于类和对象如何组合成较大的结构。它们可以使一个系统的不同部分以一种灵活的和可扩展的方式粘合在一起。结构型模式可以保证一个部分的变化不会导致整个结构的变化。

结构型模式使用继承来组合接口或实现。

GoF二十三中设计模式中结构型模式有以下几种:

  • Adapter(适配器模式)将一个类的接口,转换成客户端期望的另一个接口。适配器让原本不兼容的类可以合作无间。
  • Bridge(桥接模式):将一个抽象与实现解耦,以便两者可以独立的变化。
  • Composite组合模式将多个对象组合成树状结构来表现"整体/部分"层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
  • Decorator(装饰模式)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
  • Facade(外观模式)提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
  • Flyweight(享元模式):运用共享技术有效的支持大量细粒度的对象
  • Proxy(代理模式)为另一个对象提供一个代理(或占位符)以控制对这个对象的访问。
         
行为型模式描述对象和类之间交互的方式以及如何给它们自己分配职责

行为型模式关注于算法以及对象间的责任分配。行为型模式使用继承来分配类之间的行为。行为对象模式使用对象组合来分配行为。

GoF二十三中设计模式中行为型模式有以下几种: 

  • Chain of Responsibility(责任链模式)为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
  • Command(命令模式)将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  • Interpreter(解释器模式)给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。

  • Iterator(迭代器模式)提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。

  • Mediator(中介者模式):包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。

  • Memento(备忘录模式):备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。
  • Observer(观察者模式)定义了对象间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖对象都会收到通知并自动更新。

  • State(状态模式)允许对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
  • Strategy(策略模式)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

  • Template Method(模板方法模式)在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
  • Visitor(访问者模式):封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

你可能感兴趣的:(设计模式,gof)