前端设计模式-简单工厂模式

81 阅读2分钟
// 篮球基类
let Basketball=function(){
    this.intro="唱跳rap篮球"
}
Basketball.prototype={
    getMember:function(){
        console.log("每个队伍需要5名队员")
        },
    getBallsize:function(){
        console.log("篮球大")
    }
}

//  足球基类
let Football=function(){
    this.intro="足球在世界范围很流行"
}
Football.prototype={
    getMember:function(){
        console.log("每队伍需要11名队员")
    },
    getBallsize:function(){
        console.log("足球很大")
    }
}

// 网球基类
let Tennis=function(){
    this.intro="每年有很多网球系列赛"
}
Tennis.prototype={
    getMember:function(){
        console.log("每个队伍需要1名队员")
    },
    getBallsize:function(){
        console.log("网球很小")
    }
}

// 运动工厂
let sportsFactory=function(name){
    switch(name){
        case "NBA" :
        return new Basketball();
        case "wordcup" :
        return new Football();
        case "Frenchopen" :
        return new Tennis();
    }
}

简单工厂模式的理念是创建对象,上面的的方式是对不同的类实例化,不过除此之外简单工厂还可以创建相似的对象。将相似的东西进行提取,不相似的针对处理即可。

举个例子,创建一些书,这些书有一些相似的地方,比如目录、页码等。也有一下不相似的地方,如书名、出版时间、书的类型等等。对于创建的对象相似的属性好处理,对于不同的属性就要针对性的进行处理了,比如我们将不同的属性作为参数传递进行处理

 //工厂模式
 function createBook(name, time, type){
  // 创建—个对象,并对对象拓展属性和方法
  var o = new object();
  o.name = name;
  o.time = time;
  o.type = type;
  o.getName = function(){
  console.log(this.name);
  };
  // 将对象返回
  return o;
 }
 var book1 = createBook("js book", 2014, "js");
 var book2 = createBook("css book", 2013, "css");
 book1.getName();
 book2.getName();
 
  //工厂模式
 function createPop(type, text){
  // 创建—个对象,并对对象拓展属性和方法
  var o = new object();
  o.content = text;
  o.show = function(){
  // 显示方法
  };
  if(type == 'alert'){
  // 警示框差异部分
  }
  if(type == 'prompt'){
  // 提示框差异部分
  }
  if(type == 'confirm'){
  // 确认框差异部分
  }
  // 将对象返回
  return o;
 }
 // 创建警示框
 var userNameAlert = createPop('alert', '用户名只能是26个字母和数字');