返回

手写一下JavaScript的几种设计模式

前端

JavaScript的几种设计模式

建造者模式(Builder Pattern)

简介:

建造者模式(builder pattern)比较简单,它属于创建型模式的一种。

白话:

4个部分:有个产品,有个工厂可以造产品,有个设计师指挥造多少,有个人想买产品。

例子:

其他东西都不要,只要最后生产好的Cola,有sugar,有water。

同样的Boss函数,我可以通过更换不同的ingredients(辅料)来得到不同的产品,比如 Cola、Pepsi,Sprite 等等。

工厂模式(Factory Pattern)

简介:

工厂模式(factory pattern)是创建型模式中比较常用的一种,它提供了一种创建对象的最佳方式。

白话:

有时候我们生产产品需要非常复杂的工艺,而且生产流程中需要经过很多步骤,
这个时候,我们不想暴露这些繁杂的生产细节给客户,不想让客户知道产品的制作过程。

例子:

需要一个对象的实例的时候,通过调用一个工厂方法来创建对象。这样,客户端可以不用关注对象创建的细节。

单例模式(Singleton Pattern)

简介:

单例模式(singleton pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个访问它的全局访问点。

白话:

单例模式在创建对象时,会先检查一下这个对象是否存在。如果存在,它就不会再创建新的对象,而会把已有的对象返回出来。

例子:

应用需要全局变量,需要一个实例,不需要多余的开销。

观察者模式(Observer Pattern)

简介:

观察者模式(observer pattern)是一种行为型设计模式,它允许对象订阅其他对象并接收有关状态更改的通知。

白话:

当一个对象的状态发生改变时,它会通知所有观察它的对象,以便这些对象可以做出相应的反应。

例子:

如果某人在街角看到车祸,他会告诉他的朋友,然后他的朋友又会告诉他们的朋友,如此循环下去。

代理模式(Proxy Pattern)

简介:

代理模式(proxy pattern)是一种结构型设计模式,它提供了一种控制对象访问的机制。

白话:

创建一个代理对象来控制对另一个对象的访问。代理对象可以用来过滤请求、增加安全性,或提供其他功能。

例子:

比如我们可以创建一个缓存代理对象来减少对数据库的查询次数。

装饰模式(Decorator Pattern)

简介:

装饰模式(decorator pattern)是一种结构型设计模式,它允许在不改变对象本身的情况下,向对象添加新功能。

白话:

使用一个装饰对象来包装另一个对象,并为该对象添加新功能。

例子:

比如我们可以创建一个日志装饰对象来记录对象的每次方法调用。

策略模式(Strategy Pattern)

简介:

策略模式(strategy pattern)是一种行为型设计模式,它允许客户端选择不同的策略算法来执行任务。

白话:

定义了一系列算法,并将这些算法封装成不同的策略对象。客户端可以使用不同的策略对象来执行不同的任务。

例子:

比如我们可以创建一个排序策略对象来根据不同的比较函数对数据进行排序。

组合模式(Composite Pattern)

简介:

组合模式(composite pattern)是一种结构型设计模式,它允许将对象组合成树形结构,并以统一的方式对这些对象进行操作。

白话:

将对象组合成树形结构,并以统一的方式对这些对象进行操作。

例子:

比如我们可以创建一个文件系统对象来表示文件和目录的层次结构,并使用统一的方式来操作这些对象。

适配器模式(Adapter Pattern)

简介:

适配器模式(adapter pattern)是一种结构型设计模式,它允许将一个类的接口转换成另一个类的接口,使两个不兼容的类能够一起工作。

白话:

创建一个适配器对象来将一个类的接口转换成另一个类的接口。

例子:

比如我们可以创建一个电压适配器来将一种电压转换成另一种电压,使两种不同电压的设备能够一起工作。

门面模式(Facade Pattern)

简介:

门面模式(facade pattern)是一种结构型设计模式,它为多个复杂子系统提供一个统一的接口,使客户端能够更轻松地与这些子系统进行交互。

白话:

创建一个门面对象来将多个复杂子系统的接口封装起来,使客户端能够更轻松地与这些子系统进行交互。

例子:

比如我们可以创建一个银行账户门面对象来封装银行账户的各种操作,使客户端能够更轻松地管理自己的银行账户。