单例模式
单例模式的定义:一个类仅有一个实例,并提供一个访问它的全局访问点。比如线程池、全局缓存、浏览器的window对象等。
单例模式的实现方法
为类创建静态变量来存储单例,并定义静态函数来判断是否已经生成单例
1中方法不是透明的,用户必须知道该类是单例模式再调用静态方法,不能使用new操作符,透明的单例模式可以用闭包+IIFE实现
2中方法在日后从单例改为正常类时需要做的变动比较大,可以定义普通的类,再定义一个代理类来实现单例模式
js中可以用全局变量来定义单例,但是会造成命名空间污染,这时可以定义命名空间或使用闭包定义私有变量来解决这个问题
惰性单例
惰性单例指的是在需要的时候才创建对象实例。
策略模式
策略模式的定义:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换。
运用策略模式来根据评级计算奖金的例子如下:
let strategies = { |
策略模式的优缺点:
- 利用组合、委托、多态等技术和思想,可以有效避免多重条件选择语句
- 提供了对开放-封闭原则的完美支持,将算法封装在strategy中
- 要使用策略模式,必须要了解所有strategy,这违反了最少知识原则
参考文章
- 曾探,Javascript设计模式与开发实践,中国工信出版集团,人民邮电出版社