首页 > 代码库 > javascript的设计模式之抽象工厂模式

javascript的设计模式之抽象工厂模式

<script type="text/javascript">
//上一个是我第一次在博客里写文章,这一次我又来了
//上次是工厂模式的简单形式,这次是工厂模式的抽象版,什么是抽象呢,就不让人看着不好理解,但我尽量用好理解的方式写出来

//这是一个工厂的构造函数,里面有一个属性,属性的值是一个对象,对象里又有三个属性,分别代表了三种交通工具
//好了其实这个也是一个抽象版的工厂构造函数,好比有人跟你吹牛逼说自己要建一个能造三种交通工具的厂子,但是具体怎么造,他不会了; function Factory(){ this.goods={ Motor:‘motor‘, Bike:‘bike‘, Car:‘car‘ } }
//在工厂的原型里增加了一个方法,这个是个抽象的方法,就是没有具体的实现怎么去造的; Factory.prototype
={ createP:function(product){ throw new Error("this method should not be called directly");//如果在抽象工厂的实例上调用了这个方法,就会抛出异常 } }
//说者无意听者有心呀,回去后你就想要实现他
function Factory_one(){ Factory.apply(this,arguments);//于是你偷偷的借用了他的想法 } Factory_one.prototype=new Factory();//继承了他的方法 这里有面向对象的基础知识,什么对象冒充了,原型链继承了, Factory_one.prototype={ constructor:Factory_one,//这里要将你的工厂的constructor属性指向你自己工厂的构造函数,其实在上面有个地方咱们漏了一个地方, createP:function(product){//你要实现他的方法了 var p=null;//首先定义一个空的变量 switch(product){ case this.goods.Motor://这里能看懂吗,想想,Factory.apply(this,arguments);是干什么的,是不是把抽象工厂构造函数里的this.goods这个属性赋给了,Factory_one p=new Motor_one();//这个类在下面呢 break; case this.goods.Bike: p=new Bike_one();//这个类在下面 break; case this.goods.Car: p=new Car_one();//这个类在下面 break; default: p=new Motor_one(); break; } return p;//返回了你要的交通工具的实例 } }
//这个和上面的那个一样
function Factory_two(){ Factory.apply(this,arguments); } Factory_two.prototype=new Factory(); Factory_two.prototype={ constructor:Factory_two, createP:function(product){ var p=null; switch(product){ case this.goods.Motor: p=new Motor_two(); break; case this.goods.Bike: p=new Bike_two(); break; case this.goods.Car: p=new Car_two(); break; default: p=new Motor_two(); break; } return p; } }
//下面的是一些类了
function Motor_one(){ this.type=‘motor_one‘; this.say=function(){ console.log("我是"+this.type); } } function Motor_two(){ this.type=‘motor_two‘; this.say=function(){ console.log("我是"+this.type); } } function Bike_one(){ this.type=‘bike_one‘; this.say=function(){ console.log("我是"+this.type); } } function Bike_two(){ this.type=‘Bike_two‘; this.say=function(){ console.log("我是"+this.type); } } function Car_one(){ this.type=‘car_one‘; this.say=function(){ console.log("我是"+this.type); } } function Car_two(){ this.type=‘car_two‘; this.say=function(){ console.log("我是"+this.type); } }
//首先要获取两个工厂的实例
var factory=new Factory_one(); var factory=new Factory_two();
//调用工厂的createP方法,并传入你想要创建的交通工具,其实这里有一个更好的传参的方法,在抽象的工厂里不是已经定义了这些交通工具的名字了吗
var p_one=factory.createP("motor"); var p_two=factory.createP("motor"); p_one.say(); p_two.say(); </script>

 

javascript的设计模式之抽象工厂模式