设计模式命名,抽象和标识是通用设计结构等主要方面,这些设计结构能够被用于构造复用等OOP程序设计。设计模式确定所包含的类和实例、它们的角色、协作方式以及指责分配。
每种设计模式都重点关注一个特定的OOP问题或设计要点,描述何时使用它,在另一些约束条件下是否还适用及使用的利弊。
设计模式可以分为不同的类别,如下三类:
1. 创建型设计模式:基于创建对象的概念专注于处理对象机制,以适合特定情况的方式来创建对象。其方法可能导致项目复杂性的增加,而这些模式旨在通过控制创建过程来解决这种问题。
创建型设计模式 | 基于创建对象的概念 |
---|---|
类 | |
Factory | 基于接口数据或事件生成几个派生类的实例 |
对象 | |
Abstract | 创建若干类系列的一个实例,无需详述具体的类 |
Builder | 从表示中分离对象构建,总是创建相同类型的对象 |
Prototype | 用于复制完全初始化的实例 |
Singleton | 一个类在全局访问点只有一个实例 |
JS中属于这种类别的模式包括:
- Constructor
- Factory
- Abstract
- Prototype
- Singleton
- Builder
结构型模式与对象组合有关,常用于找出不同对象之间建立关系的简单方法。这种模式有利于确保在系统某一部分发生变化时,系统整个结构不需要同时改变。同时对于不适合因某一特定目的而改变系统的部分,该模式可以帮助重组。
结构型设计模式 | 基于构件对象块的想法 |
---|---|
类 | |
Adapter | 匹配不同类的接口,使类可在不兼容接口时共同工作 |
对象 | |
Adapter | 匹配不同类的接口,使类可在不兼容接口时共同工作 |
桥接 | 将对象接口从其实现中分离,故其可独立变化 |
组合 | 简单和复杂对象结构,使1+1>2 |
Decorator | 向对象动态添加备选的处理 |
Facade | 隐藏系统复杂性的唯一一个类 |
Flyweight | 一个用于实现包含在别处信息等高效共享粒度实例 |
Proxy | 占位符对象代表真正对象 |
JS中属于这种类别的模式包括:
- Decorator
- Facade
- Flyweight
- Adapter
- Proxy
专注于改善或简化系统中不同对象之间的通信。
行为型设计模式 | 基于对象在一起配合工作的方式 |
---|---|
类 | |
解释器 | 将语言元素包含在应用程序中的方法,以匹配预期语言等语法 |
模板方法 | 在方法中创建算法等shell,然后将确切的步骤推到子类 |
对象 | |
职责链 | 在对象链之间传递请求的方法,以找到能够处理请求的对象 |
命令 | 将命令执行从其调用程序中分离的方法 |
Iterator | 顺序访问一个集合中的元素,无需了解该集合内部的工作原理 |
Mediator | 在类之间定义简化的通信,以防止类显示引用彼此 |
备忘录 | 捕获对象内部状态以能够在以后恢复它 |
Observer | 向多个类通知改变的方式,以确保类之间地一致性 |
状态 | 状态改变时更改对象行为 |
策略 | 在一个类中封装算法,将选择与实现分离 |
Visitor | 向类添加一个新的操作,无需改变类 |
JS中属于这种类别的模式包括:
- Iterator
- Mediator
- Observer
- Visitor