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


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

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

  • 相关阅读:
    计算页数
    DOS批量拷贝文件
    时间与日期处理
    MOUSE_OVER/MOUSE_OUT与ROLL_OVER/ROLL_OUT的区别
    vb程序改写方法。
    sqldmo备份还原sqlserver2000数据库
    终于有了自己的窝啦
    vb中创建Excel,把数据存入Excel
    提高vb 》excel数据的导入速度
    SQLServer2000数据库特有的1433端口号不能访问
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_create_abstract_factory.html
Copyright © 2020-2023  润新知