工厂模式
概念
工厂模式不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,创建大量相似对象,那么这个函数就可以被视为一个工厂。工厂模式根据抽象程度的不同可以分为:简单工厂
,工厂方法
和抽象工厂
优点
通过工厂模式,我们可以快速创建大量相似对象,没有重复代码。
缺点
工厂模式创建的对象属于Object,无法区分对象类型,这也是工厂模式没有广泛使用的原因。
代码实现
简单工厂模式(静态):
// 例:将王者英雄进行按需分类,在一个公共的工厂中产出
const personList = [
{
person: ['妲己', '小乔', '周瑜', '王昭君']
},
{
person: ['李白', '阿珂', '兰陵王', '韩跳跳']
},
{
person: ['曹阿瞒', '凯爹', '宫本']
}
]
let wangzhe = function (personType) {
function Fashi() {
this.person = personList[0].person
}
function Cike() {
this.person = personList[1].person
}
function Zhanshi() {
this.person = personList[2].person
}
switch (personType) {
case 'fashi': return new Fashi(); break;
case 'cike': return new Cike(); break;
case 'zhanshi': return new Zhanshi(); break;
default: throw new Error('参数错误, 可选参数:fashi、cike、zhanshi');
}
}
//调用
let fashi = wangzhe('fashi');
let cike = wangzhe('cike');
let zhanshi = wangzhe('zhanshi');
fashi.peson // ['妲己', '小乔', '周瑜', '王昭君']
// es6写法:
class Wangzhe {
constructor(opt) {
this.person = opt.person;
}
static getPersonList(personType) {
switch (personType) {
case 'fashi': return new Wangzhe(personList[0]); break;
case 'cike': return new Wangzhe(personList[1]); break;
case 'zhanshi': return new Wangzhe(personList[2]); break;
default: throw new Error('参数错误, 可选参数:fashi、cike、zhanshi');
}
}
}
//调用
Wangzhe.getPersonList('fashi').person // ['妲己', '小乔', '周瑜', '王昭君']
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。