设计模式——单例模式

开场白

单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点

单例是一种常用的模式,有一些对象我们往往只需要一个,比如线程池全局缓存浏览器中的window对象等。

用js实现单例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 实现并不复杂,核心是利用一个变量来标志当前是否已经为某个类创建了单例
var Singleton = function(name){
this.name = name;
this.instance = null; // 标记和存放单例实例的容器
}
Singleton.prototype.getName = function(){
return this.name;
}
Singleton.getInstance = function(name){
if(!this.instance){ // 如果没有实例就创建并返回它
return this.instance = new Singleton(name);
}
// 如果已经有实例就返回它
return instance;
}
// 创建单例
var obj1 = Singleton.getInstance('william');
var obj2 = Singleton.getInstance('skye');

console.log(obj1===obj2); // true;
阅读更多

设计模式——策略模式

开场白

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

PS:相互替换这句话很大程度上是相对于静态类型语言而言的,因为静态类型语言中没有类型检查机制,所以各个策略类需要实现同样的接口。当它们的真正类型被隐藏在接口后面时,它们才能被相互替换。
而在 JavaScript 这种“类型模糊”的语言中没有这种困扰,任何对象都可以被替换使用。因此, JavaScript中的“可以相互替换使用”表现为它们具有相同的目标和意图

策略模式在开发中有着广发的应用,下面举一个计算年终奖的例子来一步一步的阐述策略模式。

例如,年终奖发放中,绩效为S的人年终有 4 倍工资,绩效为 A 的人年终奖有 3 倍工资,而绩效为 B 的人年终奖是 2 倍工资。假设财务部要求我们提供一段代码,来方便他们计算员工的年终奖。

阅读更多