上一篇<<JavaScript 设计模式之单例模式>>谈到单例模式.这节咱们谈谈工厂模式javascript
我理解的设计模式是为了提升代码复用,加强扩展性的代码编写理念,因此无关乎编程语言。java
function createPop(type,text){ var o = new object(); o.content = text; o.show = function(){ //todo }; if(type == 'alert'){ //todo } else if(type == 'conform'){ //todo } else if(type == 'prompt'){ //todo } }
建立一个Alert:var nameAlert = new createPop('alert','请输入姓名!');编程
工厂方法是将建立对象的方法推迟到子类中。如一个工厂方法能够生产几种食品类。设计模式
var FoodFactory = function(type,count){ if(this instanceof FoodFactory){ return new this[type](count); } } FoodFactory.prototype = { Pie: function(count){ //todo }, Pizza: function(count){ //todo }, Cake: function(count){ //todo } }
抽象类显示定义一些功能,但没有具体实现。子类继承了抽象类还须要实现各个虚方法。就是在其余面向对象语言里的多态,建立子类赋值给父类,好处是调用方式都是同样的,运行时会自动选择子类对应的方法。缓存
如一个汽车的公司有多个品牌,它只负责设计汽车有什么功能,但真正的生产给子公司实现。微信
var VehicleFactory = function(subType,superType){ if(typeof VehicleFactory[superType] === 'function'){ fucntion F(){}; //缓存类 F.prototype = new VehicleFactory[super](); 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('抽象方法不能调用'); }, // ... } //抽象类 VehicleFactory.Truck= function(){ this.type = 'Truck'; }; VehicleFactory.Truck.prototype = { getPrice:function(){ return new Error('抽象方法不能调用'); }, // ... } //宝马子类 var BMW = function(price,speed){ this.price = price; this.speed = speed; }; VehicleFactory(BMW,'Car'); //宝马继承了抽象父类Car,有了一些抽象方法,可是不能使用 BMW.prototype.getPrice = function(){ return this.price; } //使用 var z4 = new BMW(50000); console.log(z4.type); //Car 继承父类Car的属性 console.log(z4.getPrice()); //50000 继承父类Car的抽象方法,本身从新实现
抽象工厂作了什么?咱们须要一个新的子类时,使用抽象工厂让子类继承对应的一个抽象类,获得一些属性和虚方法,子类再实现这些虚方法,就能够使用了。编程语言
感兴趣能够加我微信,里面不少学习质料学习