浅析JS抽象工厂模式
2017-12-14 14:09
567 查看
以下就是作者学习中遇到的问题以及代码实例,最后还给大家关于JS抽象工厂模式的学习做了总结。
抽象工厂模式(Abstract Factory)就是通过类的抽象使得业务适用于一个产品类簇的创建,而不负责某一类产品的实例。
JS中是没有直接的抽象类的,abstract是个保留字,但是还没有实现,因此我们需要在类的方法中抛出错误来模拟抽象类,如果继承的子类中没有覆写该方法而调用,就会抛出错误。
const Car = function() { } Car.prototype.getPrice = function() {return new Error('抽象方法不能调用')}
实现
面向对象的语言里有抽象工厂模式,首先声明一个抽象类作为父类,以概括某一类产品所需要的特征,继承该父类的子类需要实现父类中声明的方法而实现父类中所声明的功能:
/** * 实现subType类对工厂类中的superType类型的抽象类的继承 * @param subType 要继承的类 * @param superType 工厂类中的抽象类type */ const VehicleFactory = function(subType, superType) { if (typeof VehicleFactory[superType] === 'function') { function F() { this.type = '车辆' } F.prototype = new VehicleFactory[superType]() subType.constructor = subType subType.prototype = new F() // 因为子类subType不仅需要继承superType对应的类的原型方法,还要继承其对象属性 } else throw new Error('不存在该抽象类') } VehicleFactory.Car = function() { this.type = 'car' } VehicleFactory.Car.prototype = { getPrice: function() { return new Error('抽象方法不可使用') }, getSpeed: function() { return new Error('抽象方法不可使用') } } const BMW = function(price, speed) { this.price = price this.speed = speed } VehicleFactory(BMW, 'Car') // 继承Car抽象类 BMW.prototype.getPrice = function() { // 覆写getPrice方法 console.log(`BWM price is ${this.price}`) } BMW.prototype.getSpeed = function() { console.log(`BWM speed is ${this.speed}`) } const baomai5 = new BMW(30, 99) baomai5.getPrice() // BWM price is 30 baomai5 instanceof VehicleFactory.Car // true
总结
通过抽象工厂,就可以创建某个类簇的产品,并且也可以通过instanceof来检查产品的类别,也具备该类簇所必备的方法。
您可能感兴趣的文章:
- JavaScript设计模式之抽象工厂模式介绍
- javascript抽象工厂模式详细说明
- JavaScript设计模式之工厂模式和构造器模式
- Javascript设计模式理论与编程实战之简单工厂模式
- JavaScript设计模式经典之工厂模式
- JavaScript设计模式之工厂模式简单实例教程
- JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
- JavaScript设计模式之单例模式原理与用法实例分析
- JavaScript设计模式之原型模式分析【ES5与ES6】
- JavaScript设计模式之装饰者模式定义与应用示例
- JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
相关文章推荐
- C#面向对象的设计模式 抽象工厂模式
- 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结
- 简单工厂,工厂方法和抽象工厂模式 (转)
- ★ 对抽象工厂模式的一点理解
- 抽象工厂模式
- 【模式】抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- Core Design Patterns(11) Abstract Factory 抽象工厂模式
- 介绍ASP.NET抽象工厂模式概念
- [转贴] 简单工厂,工厂方法和抽象工厂模式
- 抽象工厂模式(Abstract Factory)案例分析
- 抽象工厂模式
- 三、抽象工厂模式
- 浅谈抽象工厂模式
- 抽象工厂模式
- Headfirst-6 抽象工厂模式
- C#抽象工厂模式的几种实现方法及比较
- 抽象工厂模式(Abstract Factory)
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)