什么是设计模式
概念:设计模式是软件设计中常见问题的解决方案模型、
设计模式分类
- 创建型--如何创建一个对象
- 结构型--如何灵活的将对象组装成较大的结构
- 行为型--负责对象之间的高效通信和职责划分
前端场景下常见的设计模式
单例模式
单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
应用场景:全局缓存 全局状态管理
// 单例构造器
const FooServiceSingleton = (function () {
// 隐藏的Class的构造函数
function FooService() {}
// 未初始化的单例对象
let fooService;
return {
// 创建/获取单例对象的函数
getInstance: function () {
if (!fooService) {
fooService = new FooService();
}
return fooService;
}
}
})();
观察者模式
观察者模式(Observer Pattern):定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,其依赖的对象会自动收到通知。
应用场景:当数据模型发生改变时,可以使用观察者模式通知视图进行更新。
工厂模式
工厂模式(Factory Pattern):定义一个用于创建对象的接口,由子类决定实例化哪个类。
应用场景:根据用户的操作来创建不同类型的组件对象。
适配器模式
适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,使原本不兼容的类能够一起工作。
应用场景:为了兼容不同浏览器的差异,可以使用适配器模式来统一接口。
策略模式
策略模式(Strategy Pattern):定义一系列算法,将它们封装起来,并使它们可以互相替换,使算法的变化独立于使用算法的客户。
应用场景:根据用户的操作来选择不同的数据处理策略。
命令模式
命令模式(Command Pattern):将请求封装成对象,使得可以用不同的请求对客户进行参数化,同时支持请求的排队和记录日志。
应用场景:可以使用命令模式实现撤销、重做等操作。
装饰者模式
装饰者模式(Decorator Pattern):动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
应用场景:可以使用装饰者模式来给组件对象添加附加的行为。
责任链模式
责任链模式(Chain of Responsibility Pattern):将请求的发送者和接收者解耦,使多个对象都有机会处理该请求,直到其中一个对象处理它为止。
应用场景:可以使用责任链模式处理用户的请求。
建造者模式
建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使同样的构建过程可以创建不同的表示。
应用场景:可以使用建造者模式创建复杂的视图组件。
桥接模式
桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。
应用场景:可以使用桥接模式将视图的外观和实现分离开来。