设计模式(js)
Recommend
https://www.patterns.dev/#patterns
提示:这种模式 表示此模式在js中使用场景不多或者不重要。
创建类型设计模式
构造器模式/Constructor
关键词:使用原型/类,替代重复的对象创建操作
原型模式/Prototype
将共用的属性/函数,挂载到原型中,免于每次new对象时,都将公用的部分复制一份到实例中
构建者/创建者/创造者 模式/Builder
对象的结构不变的情况下,需要在创建对象前,进行各种中间层处理时,可以使用创建者模式,交由创建者统一管理创建(统一管理后,便于统计/验证/管理)
工厂模式/Factory
根据入参的不同,创建部分参数不同的对象或者不同类型的对象( 根据需求生成不同的对象 )
抽象工厂模式/Abstract
根据参数,需要哪个工厂返回哪个工厂,由调用方决定合何时使用工厂(不生产对象,返回工厂)
单例模式/Singleton
new对象时返回同一个对象,
- 闭包
- 对象挂载到对象中而非方法中
结构型设计模式
装饰器模式/Decorator
为对象添加新功能,并且不改变原有的结构和功能
外观模式(门面模式)/Facede
外观模式在javascript中的使用场景并不多。外观模式主要是为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使子系统更容易使用
享元模式/Flyweight
享元模式是一种用于性能优化的模式(主要考虑内存,而非效率),"fly"在这里是苍蝇的意思,意为蝇量级。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。
适配器模式/Adaptor
适配器模式的作用时解决两个软件实体间的接口不兼容的问题。使用适配器模式后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。
代理模式/Proxy
为对象提供一个代用品或者占位符,以便控制对它的访问
桥接模式
组合模式
组合模式就是用小的子对象来构建更大的对象。如树结构
行为型设计模式
解释器模式/Interpreter
描述语言语法如何定义,如何解释和编译
模板方法模式
模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。
通常在抽象父类中封装了子类的算法框架。在模板方法模式中,子类实现中的相同的部分被上移到父类中,而将不同的部分留待子类来实现。体现了泛化的思想。
职责链模式
职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者到接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
命令模式
命令模式是一种松耦合的方式,将发布者和执行者分离。命令模式中的命令指的是一个执行某些特定事情的指令
迭代器模式(Iterator)
提供一种方法顺序访问一个集合对象中的各个元素,而又不需要暴露该对象的内部表示。使用迭代器模式后,即使不关心对象的内部构造,也能按顺序访问其中的每个元素
中介者(Mediator)
通过一个中间对象,使对象之间多对多的管理变成一对多的关系。
备忘录模式
观察者模式|发布订阅模式(Observer|Pub/Sub)
本模式又称为观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知
状态机模式(State Machine)
状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变
策略模式(Strategy)
定义一系列的算法,将他们封装起来,并且使他们可以相互替换。处理掉大量的ifElse/switchCase
访问者模式(Visitor)
将数据结构和数据操作进行分离,使用场景不多
图解


文字解释
分类:


创建模式:单件模式、工厂模式、抽象工厂模式、生成器模式、原型模式。
结构模式:适配器模式、桥接模式、组成模式、装饰模式、外观模式、享元模式、代理模式。
行为模式:中介者模式、命令模式、备忘录模式、状态模式、策略模式、解释器模式、迭代器模式、观察者模式、访问者模式、模板方法模式。
第一类:
- 单件模式(Singleton Pattern):
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 例:跨窗体访问同一个实例。
- 工厂模式(Factory Pattern):
根据提供给工厂的数据,从一系列相关的类中选择一个类实例并返回。
- 例:Oracle,SQL Server 访问类的选择
- 抽象工厂模式(Abstract Factory Pattern):
为一组类返回一个工厂。
- 生成器模式(Builder Pattern):
根据提供给他的数据及表示,组装成新的对象。
- 例:根据用户不同的选择显示不同控件。
- 原型模式(Prototype Pattern):
由结果到一个新的结果。
- 例:根据由执行的SQL 查询结果得到另一个结果。
- 与生成器类似工厂,两者都返回由许多方法的对象组成的类。
- 差别:抽象工厂返回一系列相关的类。
- 生成器是根据提供给它的数据一步一步地构建一个复杂的对象。
第二类:
- 适配器模式(Adapter Pattern):
将一个类将一种接口转换成另一种接口。
- 桥接模式(Bridge Pattern):
类的接口和它的实现相分离,无需改变调用者的代码即可替代实现的过程。
- 组成模式(Composite Pattern):
组合就是对象的结合。可以构建部分-整体的关系或数据的树形关系。
- 装饰模式(Decorator Pattern):
用一个类包装给定的类改变单个对象的行为,但不需要创建一个新的派生类。
- 外观模式(Facde Pattern):
可以将一系统复杂的类包装成一个简单的封闭接口。
- 享元模式(Flyweight Pattern):
通过共享(把参数移动外部)大幅地减少单个实例的数目。
- 代理模式(Proxy Pattern):
为一个复杂的对象提供一个简单的占位对象。
第三类:
中介者模式(Mediator Pattern):
中介者做为唯一了解其它类的一个,简化了通信.促进类之音的松散便于修改维护。
- 每个和中介者通信的控件都称为同事。
- 应用:可视界面的程序中,当面临多个对象之间复杂的通信时,可使用。
命令模式(Command Pattern):
只将请求转发给特定的对象。
- 目的:将程序的界面和操作分离。缺点:增加了散乱的小类
备忘录模式(Memento Pattern):
保存对象的数据以便以后能够恢复它。
- 发起人(Originator):是一个对象,我们要保存它的状态。
- 备忘录(Memento):是另外一个对象,它保存了发起人的状态。
- 负责人(Caretaker):管理状态保存的时机,保存备忘录,并且如果需要的话,使用备忘录恢复发起人的状态。
状态模式(State Pattern):
用一个对象表示程序的状态,并通过转换对象来转换程序的状态。
- 以前,根据传进来的参数执行不同的计算或显示不同的内容。switch-case/if else状态模式要取代它。
策略模式(Stractegy Pattern):
与状态模式相似,根据需要选择一封装在Context驱动器类。
观察者模式(Observer Pattern):
以多种形式显示数据。在观察者模式中,把数据称为目标(Subject),把每种显示称为观察者(Observer)
解释器模式(Interpreter Pattern):
为某种语言定义一个文法,并用该文法解释语言中的语句。
适用性:
- 当读者需要一个命令解释器分析用户命令时。
- 当程序需要分析一个代数串时。
- 发程序要生成各种形式的输出时。
迭代器模式(Iterator Pattern):
允许使用一个标准的接口顺序访问一个数据列表或集合。
模板方法模式(Template Method Pattern):
先创建一个父类,把其中一个或多个方法留个子类实现。是一种非常简单又常用的模式。思想:将一个类的基本部分抽取出来放到一个基类中,不必重出现在一个派生类中。
职责链(Chain of Responsibility):允许多个类处理同一个请求。
要点:
- 链的组织是从最特珠的到最一般的。
- 不能保证在任何情况下都会有响应。
- 职责链用于分析器与编译器。