说到抽象工厂,如果有接触过别的语言的话,其他语言 大概都有个 虚函数和抽象函数,然后继承的自雷重写这个方法。
利用js 也可以模拟这种操作。
在这里,抽象化创建模式不是一个真实的对象实例,而是一个类簇,制定了类的结构,这也就区别于简单工厂模式创建
单一对象,工厂模式创建多类对象。
// 抽象工厂方法
var VirtualFactory = function ( subType , superType ) { // 判断抽象工厂是否有该抽象类 if( typeof VirtualFactory[superType] === 'function' ){ // 缓存类 function F(){} // 继承弗雷属性和方法,类式继承,引用类型(函数,对象,数组等)会被实例化子类公用 F.prototype = new VirtualFactory[superType]() ; F.constructor = subType; subType.prototype = new F(); }else{ throw new Error('未创建该抽象类'); } }; // 小汽车抽象类 VirtualFactory.Car = function () { this.type = 'car'; }; VirtualFactory.Car.prototype = { getPrice: function () { return new Error('抽象方法不能调用'); }, getSpeed: function () { return new Error('抽象方法不能调用'); } }; // 公交车抽象类 VirtualFactory.Bus = function () { this.type = 'bus'; }; VirtualFactory.Bus.prototype = { getPrice: function () { return new Error('抽象方法不能调用'); }, getPassengerNum: function () { return new Error('抽象方法不能调用'); } }; // 货车抽象类 VirtualFactory.Trunk = function () { this.type = 'trunk'; }; VirtualFactory.Trunk.prototype = { getPrice: function () { return new Error('抽象方法不能调用'); }, getTrainload: function () { return new Error('抽象方法不能调用'); } }; // 宝马汽车类 var BMW = function ( price , speed) { this.price = price; this.speed = speed; }; VirtualFactory( BMW , 'Car' ); BMW.prototype.getPrice = function () { console.log( this.price ); }; var c1 = new BMW( '30W' , '200km/s'); c1.getPrice(); console.log( c1.getSpeed() );