model-factory

设计模式之工厂模式

角色定义

从武侠游戏角色角度设计,可以是武林至尊、绝世高手、高手、小虾米等,我们可以把它实例化成任和一个角色,并且任意转换。

生产角色

我们可以通过以下代码实现角色定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var Wulin = function(){};
Wulin.prototype = {
var person;
initRole:function (model){
switch(model){
case 'king':
person = new King();
break;
case 'higher':
person = new Gao();
break;
case 'small':
person = new Small();
break;
default:
person = new Small();
break;
}
}
person.initSkills();
return person;
}

工厂模式

我们可以使用工厂模式进行优化,把createRole抽离出来,采用单体来实现这个工厂对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var RoleFactory = {
createRole:function (model){
var person;
switch(model){
case 'king':
person = new King();
break;
case 'higher':
person = new Gao();
break;
case 'small':
person = new Small();
break;
default:
person = new Small();
break;
}
}
return person;
}

然后,使用工厂对象:

1
2
3
4
5
6
7
8
var Wulin = function(){};
Wulin.prototype = {
initRole:function(model){
var person = RoleFactory.createRole(model);
person.initSkills();
return person;
}
}

小结

以上是简单的工厂模式使用,相比没有使用工厂模式的代码片段的好处是角色相关信息都集中在一个地方管理,在新增一个角色时不影响Wulin这个大类的代码,后者相比前者更容易维护Wulin类和角色类型。