美文网首页
(5)JavaScript抽象工厂模式

(5)JavaScript抽象工厂模式

作者: jaimor | 来源:发表于2019-04-24 15:10 被阅读0次

前边介绍了简单工厂模式组合工厂模式,其实都换汤不换药,这里再介绍一种抽象工厂模式。抽象工厂模式常出现在后端开发中,比如Java,可以使用abstract关键字来定义一个抽象类,或者组装成一个抽象工厂。
在前端中,我们也可以使用现有的语法来组装一个抽象工厂。

  • 抽象类中的方法不能直接调用,子类必须先实现其方法才能调用
  • 可以在抽象类中定义一套规范,供子类去继承实现

抽象类

//首先我们需要先定义一个模板
function MyCar(color, price) {
  this.color = color;
  this.price = price;
}
MyCar.prototype.run = function () {
  throw new Error("不能直接调用抽象方法");
}
//定义工厂
var BMW = function (color, price) {
  MyCar.call(this, color, price);
}
BMW.prototype = new MyCar('white', 123456);
//如果此时你这样使用就会报错
new BMW('white', 12345).run();    //Uncaught Error: 不能直接调用抽象方法
//所以此时就不这样 BMW.prototype = new MyCar('white', 123456);
BMW.prototype = {
  run: function () {    //重写run方法
    console.log(`the ${this.color} BMW is running`);
  }
}
new BMW('red', 1234).run();    //输出  the red BMW is running

以上就实现了一个抽象类,抽象类中的方法子类必须重写,否则不能使用。而抽象工厂,则是定义一批这样的抽象类,更具需要提供给子类去继承和重写。

抽象工厂

var Factory = function (type) {
  var _type = {
    Bus: function(no) {
      this.no = no;
    },
    Car: function (color, price) {
      this.color = color;
      this.price = price;
    }
  };
  _type.Bus.prototype.getNo = function () { throw new Error("不能直接调用抽象方法"); }
  _type.Car.prototype.run = function () { throw new Error("不能直接调用抽象方法"); }
  //...
  return (function () {
    if (_type[type]) {
      return _type[type];
    } else {
      throw new Error("不存在的类型");
    }
  }());
}
//子类继承
var BMW = function (color, price) {
  Factory('Car').call(this, color, price);
}
//同样的道理,不能使用   BMW.prototype = new MyCar('white', 123456);  这种方式继承,而是必须重写内部方法,否则使用其方法的时候会抛出异常
//应该这样
BMW.prototype.run = function () {
  console.log(`the ${this.color} BMW is running`);
}
//使用
new BMW('green', 13579).run();

相关文章

  • (5)JavaScript抽象工厂模式

    前边介绍了简单工厂模式和组合工厂模式,其实都换汤不换药,这里再介绍一种抽象工厂模式。抽象工厂模式常出现在后端开发中...

  • 5.第二篇:第5章 抽象工厂模式

    本文摘自 《JavaScript 设计模式》张容铭 著 版权归原作者所有 第5章 抽象工厂模式

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • 工厂模式

    设计模式——工厂模式从ES6重新认识JavaScript设计模式 工厂模式主要是为了创建对象实例或者类簇(抽象工厂...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 23种设计模式分类

    创建型模式(5种): 工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract ...

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

网友评论

      本文标题:(5)JavaScript抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/qdxzwqtx.html