创建型设计模式-简单工厂模式
简单工厂模式(Simple Factory):又称之为静态工厂模式,由一个工厂对象创建某一种产品对象类的实例。主要用来创建同一类对象。
多类单实例法
为了加深我们的理解,设定以下需求。假设一个大型超市卖各种东西,超市中有许多商品,例如食品类,电器类,运动类,家具类。当你去该超市买东西的时候,你只需要到固定类别下,询问售货员,他便能快速帮你介绍从而找到你想要的东西。
// 创建一个食品类, 含有类别,食品名,食品价格 ,食品产地
let Food = function(){
this.type = '食品';
this.name = '苹果';
this.price = '5.83';
this.origin = '陕西'
}
Food.prototype = {
getPrice:function(){
return this.price;
},
getRoute:function(){
console.log('超市正门西边过去')
},
getDescription:function(){
console.log('苹果又甜又大');
}
}
// 创建一个家电类, 含有类别,家具名,家具价格 ,家具品牌
let ElectricalAppliances = function(){
this.type = '家电';
this.name = '智能TV';
this.price = '5600';
this.brand = '小米';
}
ElectricalAppliances.prototype = {
getPrice:function(){
return this.price;
},
getDescription:function(){
console.log('享受智能时代');
}
}
let Sports =function(){this.type = '运动';};
let Furniture = function(){this.type='家具'};
...
// 创建了这家超市的各种类别产品之后
// 我们使用简单工厂模式来模拟让售货员去找到固定的产品
let SuperMarketFactory = function(type){
switch(type){
case '食品':return new Food();break;
case '家电':return new ElectricalAppliances();break;
case '运动': return new Sports();break;
case '家具': return new Furniture();break;
...
default :break;
}
}
// 这样我们的顾客来询问,只需要告诉类别,就可以创建对应实例了。
// 比如他需要买家电,那么 只需要如此,我们就可以创建家电实例了。售货员便可以告知他相关信息了。
let obj = new SuperMarketFactory('家电');
单对象代替多个类
此使用场景一般是在于该类中有很多共通方法时,创建相似对象。
let DialogFactory = function(type,content){
let o = new Object();
o.type = type;
o.content = content;
if(type === 'MODEL'){
// todo 模态框相关的UI渲染操作
}
if(type === 'ALERT'){
//todo 提示框相关的UI操作
}
// 将对象返回
return o;
}
// 创建一个模态框
let model = new DialogFactory('MODEL','恭喜登录成功')
上述两者方式,我们如何采用,取决于我们的业务需求。第一种方式创建的方式是通过类实例化创建对象的,第二种方式是通过创建一个对象,然后包装增强其属性和功能来实现的。前者,如果这些类(采用寄生式继承方式)均继承同一个类,则其父类的原型方法可以共用。后者,由于每个对象都是一个新的对象,所以方法是不能共用的。
参考书籍: 《JavaScript 设计模式》张容铭
同时大家也可参考这位读者的观后感