学习JavaScript设计模式——工厂模式(一)

工厂模式(一)

神奇的魔术师——简单工厂模式

  • 简单工厂模式 又叫 静态工厂方法
  • 由一个 工厂对象 决定创建某一种 产品对象类 的实例
  • 主要用来创建 同一类 对象

好处

  • 通过一个函数创建需要的对象,不用关注这些对象到底依赖于哪个基类

举个例子

  // 篮球基类
  var Baskethall = function() {
    this.intro = '篮球盛行于美国'
  }
  
  Basketball.prototype = {
     getMember: function() {
       console.log('每个队伍需要5名队员')
     },
     getBallSize: function(){
       console.log('篮球很大')
     }
  }  
  
  // 足球基类
  var Football = function() {
    this.intro = '足球在世界范围内很流行';
  }
  
  Football.prototype = {
    getMember: function() {
       console.log('每个队伍需要11名队员-')
    },
    getBallSzie: function() {
       console.log('足球很大')
    }
  }
  
  // 网球基类
  var Tennis = function() {
      this.intro = '每年有很多网球系列赛'
  }
  
  Tennis.prototype = {
    getMember: function() {
       console.log('每个队伍需要1名队员')
    },
    getBallSzie: function() {
       console.log('网球很小')
    }
  }
  
  // 运动工厂
  var SportFactory = function(name) {
    switch(name) {
       case 'NBA':
          return new Baseketball();
       case 'wordCup':
          return new Football();
       case 'FrenchOpen':
          return new Tennis();   
    }
  }

使用的时候

 var football = new SportFactor('wordCup');
 console.log(football)
 console.log(football.intro)
 football.getMember()

例子2

 var PopFactory = function(name) {
   switch(name) {
     case 'alert':
        return new LoginAlert();
     case 'confirm':
        return new LoginConfirm();
     case 'prompt':
        return new LoginPrompt();     
   }
 }
  • 这种工厂模式不是很完善,有公共的部分是可以抽象提取出来共用的

  • 简单工厂模式的理念就是创建对象,对不同的类实例化,也可以用来创建相似对象

  • 创建一些书,书与相似的地方,如目录,页码
  • 也有一些不相似的地方, 如书名、出版时间、书的类型等
  • 对于创建的对象相似的地方好处理,不同的属性就要针对性地处理,通过参数传递来处理

实例代码

  // 工厂模式
  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() {
     // Todo 显示方法
   }
   
   if(type === 'alert') {
     // 警示框差异部分
   }
   
   if(type === 'prompt') {
     // 提示框差异部分
   }
   
   if(type === 'confirm') {
     // 确认框差异部分
   }
   
   // 将对象返回
   return o
  }
  
  // 创建警示框
  var userNameAlert = createPop('alert', '用户名只能是26个字母和数字')
 

上面两种简单工厂模式

  • 第一种是通过 类实例化对象 建的
  • 第二种是通过 创建一个新的对象,然后包装增强其属性和功能 来实现的
  • 第一种 是通过类创建的对象,如果这些类继承同一个父类,那么父类原型上的方法是可以共用的
  • 第二种 是计生方式创建的对象 都是一个新的个体 所以他们的方法是不能共用的
  • 具体使用哪一种 看需求分析

你可能感兴趣的:(学习JavaScript设计模式——工厂模式(一))