设计模式之创建型抽象工厂模式

通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责某一类产品的实例。
抽象类是一种声明但不能使用的类,当你使用的时候就会报错。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('抽象方法不能调用');
  }
};

抽象工厂实际上是一个子类继承父类的方法,在该方法中需要通过传递子类以及继承父类的名称。
抽象工厂模式是设计模式中最抽象的一种,也是创建模式中唯一一种抽象化创建模式。该模式创建出的结果不是一个真实的对象实例,而是一个类簇,指定了类的结构。

原文地址:https://www.cnblogs.com/camille666/p/design_pattern_create_abstract_factory.html