【oop】工厂模式

// 简单工厂
var IphoneFactory = function(color, version){
    var iphone = new function() {};
    iphone.color = color;
    iphone.version = version;
    iphone.show = function() {
        console.log(`我是[${iphone.color}]的[iphone${iphone.version}]手机`);
    }
    return iphone;
}
var iphone6 = IphoneFactory('红色', 6);
iphone6.show();

 //工厂方法

var AppleFactory = function(type, devise){
    if(this instanceof AppleFactory) {
        if(this[type] && typeof this[type] === 'function'){
            var product = new this[type] (devise);
            return product;
        }
        console.log('苹果暂时不生产这种产品');
        return null;
    } else {
        return new AppleFactory(type, devise)
    }
}
AppleFactory.prototype = {
    iphone: function(devise) {
        var iphone = new function() {};
        iphone.color = devise.color;
        iphone.version = devise.version;
        iphone.show = function() {
            console.log(`我是[${iphone.color}]的[iphone${iphone.version}]手机`);
        }
        return iphone;
    }
}
var iphone4 = AppleFactory('iphone', {color: '白色', version: '4'});
iphone4.show();

// 抽象工厂

const VehicleFactory = function(AppleFactory, AppleType) {
    if (typeof VehicleFactory[AppleType] === 'function') {
      function Factory() { } 
      Factory.prototype = new VehicleFactory[AppleType]()
      AppleFactory.constructor = AppleFactory
      AppleFactory.prototype = new Factory()               
    } else throw new Error('不存在该抽象类')
  }
  
  VehicleFactory.IphoneFactory = function() {
    this.type = 'ApplePhone'
  }
  VehicleFactory.IphoneFactory.prototype = {
    makeIphone: function() {
        return new Error('抽象方法不可使用')
    }
  }
  
  const Iphone = function(color, version) {
    this.color = color
    this.version = version
  }
  VehicleFactory(Iphone, 'IphoneFactory')        
  Iphone.prototype.makeIphone = function() {        
    console.log('生产Iphone')
  }
  
  const IphoneX = new Iphone('黑色', 'X')
  IphoneX.makeIphone()      
  console.log(IphoneX instanceof VehicleFactory.IphoneFactory)

 

 

posted @ 2018-03-09 10:35  220和284  阅读(128)  评论(0)    收藏  举报