Javascript设计模式之简单工厂(一)

创建型设计模式-简单工厂模式

简单工厂模式(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 设计模式》张容铭
同时大家也可参考这位读者的观后感

猜你喜欢

转载自blog.csdn.net/weixin_39370315/article/details/79760291
今日推荐