收藏JavaScript知识集设计模式

设计模式汇总

2017-05-03  本文已影响392人  MinoyJet

设计模式汇总

一、基础知识

1. 设计模式概述

定义:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

根据它们的用途,设计模式可分为 创建型(Creational)结构型(Structural)行为型(Behavioral) 三种。其中 创建型模式 主要用于描述如何创建对象,结构型模式 主要用于描述如何实现类或对象的组合,行为型模式 主要用于描述类或对象怎样交互以及怎样分配职责。在 GoF 23 种设计模式中包含 5 种创建型设计模式、7 种结构型设计模式和 11 种行为型设计模式。此外,根据某个模式主要是用于处理类之间的关系还是对象之间的关系,设计模式还可以分为 类模式对象模式 。我们经常将两种分类方式结合使用,如单例模式是对象创建型模式,模板方法模式是类行为型模式。

值得一提的是,有一个设计模式虽然不属于 GoF 23 种设计模式,但一般在介绍设计模式时都会对它进行说明,它就是 简单工厂模式 ,也许是太 “ 简单 ” 了,GoF 并没有把它写到那本经典著作中,不过现在大部分的设计模式书籍都会对它进行专门的介绍。

常用 24 种设计模式如下表所示:

类型 模式名称 学习难度 使用频率
创建型模式 Creational Pattern 单例模式 Singleton Pattern ★☆☆☆☆ ★★★★☆
简单工厂模式 Simple Factory Pattern ★★☆☆☆ ★★★☆☆
工厂方法模式 Factory Method Pattern ★★☆☆☆ ★★★★★
抽象工厂模式 Abstract Factory Pattern ★★★★☆ ★★★★★
原型模式 Prototype Pattern ★★★☆☆ ★★★☆☆
建造者模式 Builder Pattern ★★★★☆ ★★☆☆☆
结构型模式 Structural Pattern 适配器模式 Adapter Pattern ★★☆☆☆ ★★★★☆
桥接模式 Bridge Pattern ★★★☆☆ ★★★☆☆
组合模式 Composite Pattern ★★★☆☆ ★★★★☆
装饰模式 Decorator Pattern ★★★☆☆ ★★★☆☆
外观模式 Facade Pattern ★☆☆☆☆ ★★★★★
享元模式 Flyweight Pattern ★★★★☆ ★☆☆☆☆
代理模式 Proxy Pattern ★★★☆☆ ★★★★☆
行为型模式 Behavioral Pattern 职责链模式 Chain of Responsibility Pattern ★★★☆☆ ★★☆☆☆
命令模式 Command Pattern ★★★☆☆ ★★★★☆
解释器模式 Interpreter Pattern ★★★★★ ★☆☆☆☆
迭代器模式 Iterator Pattern ★★★☆☆ ★★★★★
中介者模式 Mediator Pattern ★★★☆☆ ★★☆☆☆
备忘录模式 Memento Pattern ★★☆☆☆ ★★☆☆☆
观察者模式 Observer Pattern ★★★☆☆ ★★★★★
状态模式 State Pattern ★★★☆☆ ★★★☆☆
策略模式 Strategy Pattern ★☆☆☆☆ ★★★★☆
模板方法模式 Template Method Pattern ★★☆☆☆ ★★★☆☆
访问者模式 Visitor Pattern ★★★★☆ ★☆☆☆☆

2. 面向对象设计原则

如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。

最常见的 7 种面向对象设计原则如下表所示:

设计原则名称 定 义 使用频率
单一职责原则 (Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责 ★★★★☆
开闭原则 (Open-Closed Principle, OCP) 软件实体应对扩展开放,而对修改关闭 ★★★★★
里氏代换原则 (Liskov Substitution Principle, LSP) 所有引用基类对象的地方能够透明地使用其子类的对象 ★★★★★
依赖倒转原则 (Dependence Inversion Principle, DIP) 抽象不应该依赖于细节,细节应该依赖于抽象 ★★★★★
接口隔离原则 (Interface Segregation Principle, ISP) 使用多个专门的接口,而不使用单一的总接口 ★★☆☆☆
合成复用原则 (Composite Reuse Principle, CRP) 尽量使用对象组合,而不是继承来达到复用的目的 ★★★★☆
迪米特法则 (Law of Demeter, LoD) 一个软件实体应当尽可能少地与其他实体发生相互作用 ★★★☆☆

二、24 种设计模式简介

1. 6 个创建型模式

单例模式 (Singleton Pattern)

单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

简单工厂模式 (Simple Factory Pattern)

简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式。它属于类创建型模式。

工厂方法模式 (Factory Method Pattern)

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。它属于类创建型模式。

抽象工厂模式 (Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

原型模式 (Prototype Pattern)

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。

建造者模式 (Builder Pattern)

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

2. 7 个结构型模式

适配器模式 (Adapter Pattern)

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

桥接模式 (Bridge Pattern)

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

组合模式 (Composite Pattern)

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。

装饰模式 (Decorator Pattern)

装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

外观模式 (Facade Pattern)

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

享元模式 (Flyweight Pattern)

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

代理模式 (Proxy Pattern)

代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英 文叫做 Proxy 或 Surrogate ,它是一种对象结构型模式。

3. 11 个行为型模式

职责链模式 (Chain of Responsibility Pattern)

职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。

命令模式 (Command Pattern)

命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作 (Action) 模式或事务 (Transaction) 模式。

解释器模式 (Interpreter Pattern)

解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的 “语言” 是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。

迭代器模式 (Iterator Pattern)

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

中介者模式 (Mediator Pattern)

中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

备忘录模式 (Memento Pattern)

备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

观察者模式 (Observer Pattern)

观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

状态模式 (State Pattern)

状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

策略模式 (Strategy Pattern)

策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。

模板方法模式 (Template Method Pattern)

模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。

访问者模式 (Visitor Pattern)

访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。

参考资料:
史上最全设计模式导学目录(完整版)
设计模式 | 菜鸟教程
图说设计模式

上一篇下一篇

猜你喜欢

热点阅读