JS设计模式(动态工厂模式)

<!--引入的核心JS文件-->
<script type="text/javascript" src="CommonUtil.js"></script>
<script type=text/javascript charset=utf-8>
<!--JS设计模式(细粒度工厂模式)-->
//搭建一个工厂环境 买什么车——(去什么店)卖车的店——卖车——生产车

//卖车店 super Shop 只有卖车的方法
function CarShop(){};
CarShop.prototype={
constructor:CarShop,
sellCar:function(type){//卖车方法
this.abstractSellCar(type);
},
abstractSellCar:function(){
throw new Error("这是个抽象方法");
}
};
//具体的4s店
function BenzCarShop(){};
JALJA.extend(BenzCarShop,CarShop);
BenzCarShop.prototype={
constructor:BenzCarShop,
sellCar:function(type){
var car;//声明一个变量
var types=["Benz"];//存放所有Benz类型车
for(t in types){
if(types[t]===type){
car=CarFactory.createCar(type);
}else{
alert("没有你要的车");
}
}
return car;
}
};
function BmwCarShop(){};
JALJA.extend(BmwCarShop,CarShop);
BenzCarShop.prototype={
constructor:BmwCarShop,
sellCar:function(type){
var car;//声明一个变量
var types=["Bmw"];//存放所有Benz类型车
for(t in types){
if(types[t]===type){
car=CarFactory.createCar(type);
}else{
alert("没有你要的车");
}
}
return car;
}
};
//生产车的工厂 - 动态工厂函数(eval)
var CarFactory={
createCar:function(type){
//var car =new Benz();
var car=eval("new "+type+" ()");//声明一个变量
//检验接口实现
JALJA.Interface.ensureImplements(car,CarInterface);
return car;
}

};
var CarInterface =new JALJA.Interface("CarInterface",[‘start‘,‘run‘]);
//所有车的父类
function BaseCar(){};
BaseCar.prototype={
constructor:BaseCar,
start:function(){
alert(this.constructor.name + " :start");
},
run:function(){
alert(this.constructor.name +" :run");
}
}
//具体的车
function Benz(){};
//继承 --放在特有属性前面
JALJA.extend(Benz,BaseCar);
//定义自己特有的属性
Benz.prototype.driverBenz=function(){
alert("Benz 特有1");
};
function Bmw(){};
//继承 --放在特有属性前面
JALJA.extend(Bmw,BaseCar);
//定义自己特有的属性
Bmw.prototype.driverBmw=function(){
alert("Bmw 特有1");
};
function Audi(){};
//继承 --放在特有属性前面
JALJA.extend(Audi,BaseCar);
//定义自己特有的属性
Audi.prototype.driverAudi=function(){
alert("Audi 特有1");
};
//测试
var shop=new BenzCarShop();
var car=shop.sellCar("Benz");
car.run();
car.start();
car.driverBenz();
</script>

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。