通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责某一类产品的实例。
抽象类是一种声明但不能使用的类,当你使用的时候就会报错。JavaScript中的抽象类不能像传统面向对象语言那样轻松地创建,我们可以在类的方法中手动抛出错误来模拟抽象类。你可能会想,这样的类什么都不能做有什么用?其实它在继承上是很有用的。
抽象工厂模式不能用来创建具体对象,一般用它作为父类创建一些子类。
// 抽象工厂方法 var PageFactory = function(parent, child) { // 判断抽象工厂中是否有该抽象类 if(typeof PageFactory[child] === ‘function‘) { // 缓存类 function F() {}; // 继承父类属性和方法 F.prototype = new PageFactory[child](); // 将子类构造函数指向子类 parent.constructor = parent; // 子类原型继承父类 parent.prototype = new F(); } else { // 不存在该抽象类抛出错误 throw new Error(‘未创建该抽象类‘); } }; // CSS抽象类 PageFactory.MyCss = function() { this.type = ‘css‘; }; PageFactory.MyCss.prototype = { getElement: function() { return new Error(‘抽象方法不能调用‘) } }; // JS抽象类 PageFactory.MyJs = function() { this.type = ‘js‘; }; PageFactory.MyJs.prototype = { getElement: function() { return new Error(‘抽象方法不能调用‘); } };
抽象工厂实际上是一个子类继承父类的方法,在该方法中需要通过传递子类以及继承父类的名称。
抽象工厂模式是设计模式中最抽象的一种,也是创建模式中唯一一种抽象化创建模式。该模式创建出的结果不是一个真实的对象实例,而是一个类簇,指定了类的结构。
时间: 2024-10-01 03:06:31