zoukankan      html  css  js  c++  java
  • 设计模式之创建型抽象工厂模式

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

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

  • 相关阅读:
    超实用的 Nginx 极简教程,覆盖了常用场景(转)
    阿里云Redis开发规范(转)
    什么是 AQS ?
    缓存穿透、缓存并发、缓存失效之思路变迁(转)
    看不懂JDK8的流操作?5分钟带你入门(转)
    Redis 分布式锁的正确实现方式(转)
    urllib-Proxy
    基本urllib库
    Windows DOS 命令(持续更新...)
    java 位运算符
  • 原文地址:https://www.cnblogs.com/camille666/p/design_pattern_create_abstract_factory.html
Copyright © 2011-2022 走看看