美文网首页
javascript设计模式-抽象工厂模式

javascript设计模式-抽象工厂模式

作者: 蟹老板爱写代码 | 来源:发表于2018-03-29 14:07 被阅读0次

目的:对子类实现进行规范,防止因子类没实现调用了父类的方法,所以当调用父类方法时,抛出异常

   // 抽象工厂模式
   var VehicleFactory = function (subType, superType) {
     // 判断抽象工厂中是否有该抽象类
     if (typeof VehicleFactory[superType] === 'function') {
       // 缓存类
       // 方法一:使用Object.create创建,但是会无法继承夫类的属性,读取bmw.type时,会出现undefined
       //subType.prototype = Object.create(VehicleFactory[superType].prototype)
       // 方法二:使用new关键字创建
       subType.prototype = new VehicleFactory[superType]()
       // 方法三:分别继父类原型和子类构造器
       // function F(){}
       // F.prototype = new VehicleFactory[superType]()
       // subType.constructor = subType
       // subType.prototype = new F()
     } else {
       throw new Error('未创建该抽象类')
     }
   }
   // 小汽车抽象类
   VehicleFactory.Car = function () {
     this.type = 'Car'
   }
   VehicleFactory.Car.prototype = {
     getPrice: function () {
       return new Error('抽象方法不能调用')
     },
     getSpeed: function () {
       return new Error('抽象方法不能调用')
     }
   }
   // 公交车抽象类
   VehicleFactory.Bus = function () {
     this.type = 'Bus'
   }
   VehicleFactory.Bus.prototype = {
     getPrice: function () {
       return new Error('抽象方法不能调用')
     },
     getSpeed: function () {
       return new Error('抽象方法不能调用')
     }
   }
   // 货车抽象类
   VehicleFactory.Truck = function () {
     this.type = 'Truck'
   }
   VehicleFactory.Truck.prototype = {
     getPrice: function () {
       return new Error('抽象方法不能调用')
     },
     getSpeed: function () {
       return new Error('抽象方法不能调用')
     }
   }

   // 宝马汽车子类
   var BMW = function (price, speed) {
     this.price = price
     this.speed = speed
   }
  // 通过工厂创建子类
   VehicleFactory(BMW, 'Car')
   BMW.prototype.getPrice = function () {
     return this.price
   }
   BMW.prototype.getSpeed = function () {
     return this.speed
   }

   // 兰博基尼
   var Lamborghini = function(price, speed) {
     this.price = price
     this.speed = speed
   }
   VehicleFactory(Lamborghini, 'Car')
   Lamborghini.prototype.getPrice = function () {
     return this.price
   }
   Lamborghini.prototype.getSpeed = function () {
     return this.speed
   }

   // 宇通汽车子类
   var YUTONG = function(price, speed) {
     this.price = price
     this.speed = speed
   }
   VehicleFactory(YUTONG, 'Bus')
   YUTONG.prototype.getPrice = function () {
     return this.price
   }
   // 子类没有实现父类的方法
   // YUTONG.prototype.getSpeed = function () {
   //   return this.speed
   // }


   var bmw = new BMW(100, '100km')
   var lambo = new Lamborghini(300, '300km')
   var yutong = new YUTONG(500, '200km')
   console.log(bmw.getPrice()) // 100
   console.log(bmw.getSpeed()) //100km
   console.log(bmw.type) // Car
   console.log(lambo.getPrice()) // 300
   console.log(lambo.getSpeed()) // 300km
   console.log(yutong.getPrice()) // 500
   console.log(yutong.getSpeed()) // Error

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

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

  • 常用设计模式

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

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • Android 源码设计模式解析与实战 读书笔记 6 抽象工厂模

    创建型设计模式 —— 抽象工厂模式 1. 抽象工厂模式介绍 抽象工厂模式(Abstract Factory Pat...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • 创建型设计模式

    一 . 工厂模式 二. 抽象工厂设计模式

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

网友评论

      本文标题:javascript设计模式-抽象工厂模式

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