//创建一个工厂的环境
//卖车的商店
function CarShop(){};
CarShop.prototype = {
constructor : CarShop, //还原构造器
sellCar : function(type){
//this指向CarShop,创建抽象类
this.abstractSellCar(type);
},
//创建抽象类
abstractSellCar : function(){
throw new Error('没有次抽象类');
}
}
//每个车的品牌单独负责销售,所以需要创建抽象子类
function AudiCarShop(){};
//子类继承父类
Fan.extend(AudiCarShop,CarShop);
AudiCarShop.prototype = {
constructor : AudiCarShop,
//重写父类SellCar方法
SellCar : function(type){
var car;//声明一个变量
var types = ['Audi'] //声明一个数组,存放品牌类型
for(t in types){
//判断商店里是否有你传进来的汽车
if(types[t] === type){
car = CarFactory.createCar(type);
}else{
throw new Error('没有您要找的类型');
}
}
//var car = CarFactory.createCar(type);
return car;
}
}
function BenzCarShop(){};
Fan.extend(BenzCarShop,CarShop);
BenzCarShop.prototype = {
constructor : BenzCarShop,
SellCar : function(type){
var car;
var types = ['Benz'];
for(t in types){
if(types[t] === type){
car = CarFactory.createCar(type);
}else{
throw new Error('没有您想要的车');
}
}
return car;
}
}
//生产车的工厂,单体模式
//动态工厂模式
var CarFactory = {
createCar :function(type){
//eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
//利用eval动态创建传入类型的实例对象
var car = eval('new '+ type +'()');
//验证接口
Fan.Interface.ensureImplements(car , CarInterface);
return car;
}
}
//通过接口类,实例化一个接口对象
var CarInterface = new Fan.Interface('CarInterface',['start','run']);
//父类
function BaseCar(){};
BaseCar.prototype = {
constructor : BaseCar,
start : function(){
console.log(this.constructor.name + '...start');
},
run : function(){
console.log(this.constructor.name + '...run');
}
}
//车类,宝马,奔驰,奥迪
function Benz(){};
Fan.extend(Benz,BaseCar);
Benz.prototype.driveBenz = function(){
console.log('drive...Benz');
}
function Bmw(){};
Fan.extend(Bmw,BaseCar);
function Audi(){};
Fan.extend(Audi,BaseCar);
// var shop = new CarShop();
// var car = shop.sellCar('Benz');
// car.start();
// car.run();
// car.driveBenz();
var audiCar = new AudiCarShop();
var audi = audiCar.SellCar('Audi');
audi.run();
var benzCar = new BenzCarShop();
var benz = benzCar.SellCar('Benz');
benz.run();
实现简单工厂(三)
最新推荐文章于 2020-09-29 10:02:22 发布