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