# 设计模式

# 设计模式

# 创建型

# 单例模式

定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。

何时使用: 一个全局的类频繁创建和销毁

例子:

  1. 创建菜单对象
  2. 弹窗

# 工厂模式

# 静态工厂模式

不暴露创建对象的具体逻辑而是将逻辑进行封装,由一个工厂对象决定创建某一个类的实例。

# 抽象工厂模式

通过类的抽象使得业务适用于一个产品类簇的创建,而不负责某一个类产品的实例。

# 建造者模式

# 结构型

# 代理模式

定义:为一个对象提供一个代用品或占位符,以便控制对它的访问。

何时使用:某一个花销很大的操作,可以通过虚拟代理的方式延迟到这种需要它的时候才去创建。

例子:图片懒加载

图片懒加载的方式:先通过一张loading图占位,然后通过异步的方式加载图片,等图片加载好了再把完成的图片加载到img标签里面。

# 适配器模式

适配器模式的目的是为了解决对象之间的接口不兼容的问题,通过适配器模式可以不更改源代码的情况下,让两个原本不兼容的对象在调用时正常工作。

# 装饰器模式

装饰者模式能够在不更改源代码自身的情况下,对其进行职责添加。装饰器模式是继承的一个替代模式,它可以动态的扩展一个实现类的功能。

例子

在编写飞机大战的游戏中,飞机对象的攻击方式只有普通子弹攻击,如何在不更改原代码的情况下,为它其他的攻击方式,如激光武器,导弹武器?

class Aircraft {
    ordinary(){
        console.log('发射普通子弹')
    }
}
class AircraftDecorator {
    constructor(aircraft){
       this.aircraft = aircraft
    }
    laser(){
        console.log('发射激光')
    }
    guidedMissile(){
        console.log('发射导弹')
    }
    ordinary(){
        this.aircraft.ordinary()
    }
}
const aircraft = new Aircraft()
const aircraftDecorator = new AircraftDecorator(aircraft)
aircraftDecorator.ordinary() // 发射普通子弹
aircraftDecorator.laser() // 发射激光
aircraftDecorator.guidedMissile() // 发射导弹

# 享元模式

# 组合模式

# 行为型

# 策略模式

定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。策略模式的目的是,将算法的使用与算法的实现分离开来。

# 发布订阅模式

定义对象之间的1对N的依赖关系,当其中一个对象发生变化时,所有依赖于它的对象都会得到通知。

# 迭代器模式

# 命令模式

# 状态模式

# 中介者模式

# 职责链模式

# 模板方法模式

# 设计的原则

# 单一职责原则

一个程序只需要做好一件事。如果功能过于复杂就拆分开,保证每个部分的独立。

# 最少知识原则

面向接口编程,依赖于抽象而不依赖于具体。使用方只专注接口而不用关注具体类的实现。

# 开放-封闭原则

对扩展开放,对修改封闭。增加需求时,扩展新代码,而不是修改源代码。

# 技巧

Last Updated: 4/6/2022, 3:11:44 PM