简单工厂模式
只提供一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| var Basketball=function(){ this.intro="篮球" } Basketball.prototype={ getMember:function(){ console.log('每个队伍5名队员') }, getBallSize:function(){ console.log('蓝球很大') } }
var Football=function(){ this.intro='足球' } Football.prototype={ getMember:function(){ console.log('每个队伍需要11名队员') }, getBallSize:function(){ console.log('租足球很大') } }
var SportFactory=function(name){ switch(name){ case 'NBA': return new Basketball(); case 'wordCup': return new Football() } }
var football=SportFactory('wordCup') console.log(football) console.log(football.intro) football.getMember()
|
抽象工厂模式
抽象工厂其实就是一个实现子类继承父类的方法,在这个方法中我们通过传递子类以及要继承父类(抽象类)的名称,在抽象工厂方法中增加一次对抽象类存在性的一次判断,如果存在,则将子类继承父类的方法,然后子类通过寄生式继承,继承父类过程中,在对过渡类的原型继承时,我们不是继承父类的原型,而是通过new复制父类的一个实例,这么做是因为过渡类不应该仅仅继承父类的原型方法,还要继承父类的对象属性,通过new关键字将父类构造函数执行一遍来复制构造函数中的属性和方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| var VehicleFactory=function(subType,superType){ if(typeof VehicleFactory[superType]==='function'){ function F(){ } F.prototype=new VehicleFactory[superType]() subType.constructor=subType subType.prototype=new F() }else{ throw new Error('未创建该抽象类') } }
VehicleFactory.Car=function(){ this.type='car' } VehicleFactory.Car.prototype={ getPrice:function(){ return new Error('抽象方法不能调用') }, getSpeed:function(){ return new Error('抽象方法不能调用') } }
VehicleFactory.Bus=function(){ this.type='bus' } VehicleFactory.Bus.prototype={ getPrice:function(){ return new Error('抽象方法不能调用') }, getSpeed:function(){ return new Error('抽象方法不能调用') } }
VehicleFactory.Truck=function(){ this.type='truck' } VehicleFactory.Truck.prototype={ getPrice:function(){ return new Error('抽象方法不能调用') }, getSpeed:function(){ return new Error('抽象方法不能调用') } }
var BMW=function(price,speed){ this.price=price; this.speed=speed
}
VehicleFactory(BMW,'Car') BMW.prototype.getPrice=function(){ return this.price } BMW.prototype.getSpeed=function(){ return this.speed }
var Lamborghini=function (price,speed) { this.price=price; this.speed=speed }
VehicleFactory(Lamborghini,'Car') Lamborghini.prototype.getPrice=function(){ return this.price } Lamborghini.prototype.getSpeed=function(){ return this.speed }
|