跳至主要內容

设计模式

Yang大约 5 分钟JavaScript

设计原则

引言

  • 设计:按照一种思路或者标准来实现功能
  • 功能相同,可以有不同的设计方案来实现
  • 伴随着需求增加,设计的作用才能体现出来

《UNIX/LINUX 设计哲学》准则

  • 准则 1:小即是美
  • 准则 2:让每个程序只做好一件事
  • 准则 3:快速建立原型
  • 准则 4:舍弃高效率而取可移植性
  • 准则 5:采用纯文本来存储数据
  • 准则 6:充分利用软件的杠杆效应(软件复用)
  • 准则 7:使用 shell 脚本来提高杠杆效应和可以执行
  • 准则 8:避免强制性的用户界面
  • 准则 9:让每个程序都成为过滤器
    • ls | grep *.json
  • 小准则
    • 允许用户定制环境
    • 尽量使操作系统内核小而轻量化
    • 使用小写字母并尽量简短
    • 沉默是金
    • 寻求 90% 的解决方案

五大设计原则

单一职责原则( S )

  • 一个程序只做好一件事
  • 如果功能过于复杂就拆分开,每个部分保持独立

开放封闭原则( O )

  • 对扩展开放,对修改封闭
  • 增加需求时,扩展新代码,而非修改已有代码

里式置换原则( L )

  • 子类能覆盖父类
  • 父类能出现的地方,子类就能出现
  • JS 中使用较少( 弱类型 & 继承使用较少 )

接口独立原则( I )

  • 保持接口的单一独立,避免出现"胖接口"
  • JS 中没有接口( typescript 除外 ),使用较少
  • 类似于单一职责原则,这里更关注接口

依赖倒置原则( D )

  • 面向接口编程,依赖于抽象而不依赖于具体
  • 使用方只关注接口而不关注具体类的实现
  • JS 中使用较少( 没有接口 & 弱类型 )

设计模式

创建型

关注 如何创建对象,主要特点是将对象的创建和使用分离。一般抽象了对象实例化的过程,用来帮助创建对象的实例

单例模式

保证一个类只有一个实例,并提供一个访问它的全局访问点

工厂模式

根据输入的不同返回不同类的实例,一般用来创建同一类对象

抽象工厂模式

通过对类的工厂抽象,使其业务用于对产品类簇的创建

建造者模式

分步构建一个复杂对象,使得同样的构建过程可以采用不同的表示

结构型模式

关注如何 将对象按某种布局组成更大的结构

代理模式

为目标对象创造一个代理对象,以控制对目标对象的访问

享元模式

运用共享技术来有效地支持大量细粒度对象的复用,减少创建的对象的数量

适配器模式

解决两个软件实体间接口不兼容的问题

装饰者模式

向一个现有的对象添加新的功能,同时又不改变其结构

外观模式

为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问

组合模式

用小的子对象构建更大的对象,使得对单个对象和组合对象具有一致的访问性

桥接模式

将类的抽象部分与实现部分分离,使它们可以独立地变化

行为型模式

行为型模式关注对象之间的通信,描述对象之间怎样相互协作,以及怎样分配职责

发布 - 订阅模式

多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为

策略模式

定义了一系列算法,并将每个算法封装起来,使它们可以相互替换

状态模式

允许一个对象在其内部状态发生改变时改变其行为能力

模板方法模式

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤

迭代器模式

提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示

命令模式

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开

职责链模式

把请求从链中的一个对象传到下一个对象,直到请求被响应为止

中介者模式

定义一个中介对象来简化原有对象之间的复杂耦合关系

备忘录模式

访问者模式

解释器模式

观察者模式

其他模式

  • MVCMVPMVVM: 用于系统分层,降低层间耦合
  • 模块模式: 将内部的属性和方法隐藏,仅暴露需要暴露的部分
  • 链模式: 通过在对象方法中将当前对象返回,实现对同一个对象的多个方法的链式调用
  • 中间件: 处于操作系统和应用程序之间的软件,来完成对任何数据的预处理和后处理
上次编辑于:
贡献者: sunzhenyang