JS中的常见设计模式

JavaScript021

JS中的常见设计模式,第1张

1、 单例模式

单例模式就是一个实例,在整个网页的生命周期里只创建一次,后续再调用实例创建函数的时候,返回的仍是之前创建的实例。在实际开发中应用十分广泛,例如页面中的登录框,显示消息的提示框。

2、策略模式

策略模式是指将策略(算法)封装起来,策略的目的是将算法和使用分离开。

3、代理模式

代理模式很好理解,我们不能直接使用目标函数,而是通过调用代理函数来实现对目标函数的使用。

4、发布订阅者模式

发布订阅模式在实际应用中非常常见,例如,我们在微信App上关注了某个公众号,当该公众号有新文章发布时,就会通知我们。

发布订阅模式定义四了一种一对多的依赖关系,当“一”发生变化,通知多个依赖。

5、命令模式

所谓命令模式就是将要执行的业务逻辑封装到一个函数或类中,不需要具体谁来执行该命令。

State 模式是一种特殊形式的 Strategy 模式:Context 选择的具体策略根据不同的 state 发生变化。

对于 Strategy 模式,可以基于不同的变量比如传入的参数来决定选择具体哪个策略,一旦选择确定后,直到 context 剩余的整个生命周期结束,该策略都保持不变。相反在 State 模式中,策略(或者在这里的语境下,叫做 状态 )在 context 的生命周期里是动态变化的,从而允许对象的行为可以根据内部状态的变化自适应地更改。

举例来说,我们需要创建一个宾馆预定系统,由一个 Reservation 类对预定房间的行为进行建模。

考虑如下一系列事件:

参考上图,可以实现 3 种 不同的策略,他们都实现了 confirm() 、 cancel() 、 delete() 这几个方法。每种策略的具体逻辑由不同的状态决定。 Reservation 对象只需要在每次状态切换时,激活对应的策略。

package.json :

failsafeSocket.js :

上述 FailsafeSocket 类主要由以下几个组件构成:

offlineState.js :

上述模块负责定义 socket 处于离线状态时的行为。

onlineState.js :

OnlineState 模块实现了当 socket 处于在线状态时的行为。

server.js :

client.js :

Node.js Design Patterns: Design and implement production-grade Node.js applications using proven patterns and techniques, 3rd Edition