Netherspite

单例模式

单例模式的定义:一个类仅有一个实例,并提供一个访问它的全局访问点。比如线程池、全局缓存、浏览器的window对象等。

单例模式的实现方法

  1. 为类创建静态变量来存储单例,并定义静态函数来判断是否已经生成单例

  2. 1中方法不是透明的,用户必须知道该类是单例模式再调用静态方法,不能使用new操作符,透明的单例模式可以用闭包+IIFE实现

  3. 2中方法在日后从单例改为正常类时需要做的变动比较大,可以定义普通的类,再定义一个代理类来实现单例模式

  4. js中可以用全局变量来定义单例,但是会造成命名空间污染,这时可以定义命名空间或使用闭包定义私有变量来解决这个问题

惰性单例

惰性单例指的是在需要的时候才创建对象实例。

策略模式

策略模式的定义:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。

运用策略模式来根据评级计算奖金的例子如下:

let strategies = {
'S': value => value * 4,
'A': value => value * 3,
'B': value => value * 2
};
let conutBonus = (performance, salary) => strategies[performance](salary);

策略模式的优缺点:

  • 利用组合、委托、多态等技术和思想,可以有效避免多重条件选择语句
  • 提供了对开放-封闭原则的完美支持,将算法封装在strategy中
  • 要使用策略模式,必须要了解所有strategy,这违反了最少知识原则

参考文章

  1. 曾探,Javascript设计模式与开发实践,中国工信出版集团,人民邮电出版社

 评论