5.第二篇:第5章 抽象工厂模式

本文摘自 《JavaScript 设计模式》张容铭 著 版权归原作者所有

第5章 抽象工厂模式

// 抽象工厂方法
var VehicleFactory = function(subType,superType){
  // 判断抽象工厂中是否有该抽象类
  if(typeof VehicleFactory[superType] === 'function' ){
    // 缓存类
    function F(){};
    // 继承父类属性和方法
    F.prototype = new VehicleFactory[superType]();
    // 将子类constructor 指向子类
    subType.constructor = subType;
    // 子类原型继承“父类”
    subType.prototype = new F();
  }else{
    // 不存在该抽象类抛出错误
    throw new Error('未创建该抽象类')
  }
}

// 小汽车抽象类
VehicleFactory.Car = function(){
  this.type = 'car';
}
VehicleFactory.Car.prptotype = {
  getPrice : fuction(){
    return new Error('抽象方法不能调用');
  },
  getSpeed : function(){
    return new Error('抽象方法不能调用');
  }
}

// 公交车抽象类
VehicleFactory.Bus = function(){
  this.type = 'bus';
}
VehicleFactory.Bus.prptotype = {
  getPrice : fuction(){
    return new Error('抽象方法不能调用');
  },
  getPassengerNum: function(){
    return new Error('抽象方法不能调用');
  }
}

// 货车抽象类
VehicleFactory.Truck = function(){
  this.type = 'bus';
}
VehicleFactory.Truck.prptotype = {
  getPrice : fuction(){
    return new Error('抽象方法不能调用');
  },
  getTrainload: function(){
    return new Error('抽象方法不能调用');
  }
}

// 调用
// 宝马汽车子类
var BMW = function(price,speed){
  this.price = price;
  this.speed = speed;
}
// 抽象工厂实现对Car抽象类的继承
VehicleFactory(BMW,'Car');
BMW.prototype.getPrice = function(){
  return this.price;
},
BMW.prototype.getSpeed = function(){
  return this.speed;
}

var YUTONG = function(price,passenger){
  this.price = price;
  this.passenger = passenger;
}
// 抽象工厂实现对Bus抽象类的继承
VehicleFactory(YUTONG ,'Bus');
YUTONG.prototype.getPrice = function(){
  return this.price;
},
YUTONG.prototype.getPassengerNum= function(){
  return this.passenger;
}

// 奔驰汽车子类
var BenzTruck= function(price,passenger){
  this.price = price;
  this.trainLoad = trainLoad;
}
// 抽象工厂实现对Bus抽象类的继承
VehicleFactory(BenzTruck,'Truck');
BenzTruck.prototype.getPrice = function(){
  return this.price;
},
BenzTruck.prototype.getTrainload = function(){
  return this.price;
}

var truck = new BenzTruck(1000,100);
console.log(truck.getPrice()); // 1000
console.log(truck.type); // truck

你可能感兴趣的:(5.第二篇:第5章 抽象工厂模式)