美文网首页
5.第二篇:第5章 抽象工厂模式

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

作者: 爱吃鱼的肥兔子 | 来源:发表于2018-11-26 15:18 被阅读0次

    本文摘自 《JavaScript 设计模式》张容铭 著 版权归原作者所有

    第5章 抽象工厂模式

    // 抽象工厂方法
    var VehicleFactory = function(subType,superType){
      // 判断抽象工厂中是否有该抽象类
      if(typeof VehicleFactory[superType] === 'function' ){
        // 缓存类
        function F(){};
        // 继承父类属性和方法
        F.prototype = new VehicleFactory[superType]();
        // 将子类constructor 指向子类
        subType.constructor = subType;
        // 子类原型继承“父类”
        subType.prototype = new F();
      }else{
        // 不存在该抽象类抛出错误
        throw new Error('未创建该抽象类')
      }
    }
    
    // 小汽车抽象类
    VehicleFactory.Car = function(){
      this.type = 'car';
    }
    VehicleFactory.Car.prptotype = {
      getPrice : fuction(){
        return new Error('抽象方法不能调用');
      },
      getSpeed : function(){
        return new Error('抽象方法不能调用');
      }
    }
    
    // 公交车抽象类
    VehicleFactory.Bus = function(){
      this.type = 'bus';
    }
    VehicleFactory.Bus.prptotype = {
      getPrice : fuction(){
        return new Error('抽象方法不能调用');
      },
      getPassengerNum: function(){
        return new Error('抽象方法不能调用');
      }
    }
    
    // 货车抽象类
    VehicleFactory.Truck = function(){
      this.type = 'bus';
    }
    VehicleFactory.Truck.prptotype = {
      getPrice : fuction(){
        return new Error('抽象方法不能调用');
      },
      getTrainload: function(){
        return new Error('抽象方法不能调用');
      }
    }
    
    // 调用
    // 宝马汽车子类
    var BMW = function(price,speed){
      this.price = price;
      this.speed = speed;
    }
    // 抽象工厂实现对Car抽象类的继承
    VehicleFactory(BMW,'Car');
    BMW.prototype.getPrice = function(){
      return this.price;
    },
    BMW.prototype.getSpeed = function(){
      return this.speed;
    }
    
    var YUTONG = function(price,passenger){
      this.price = price;
      this.passenger = passenger;
    }
    // 抽象工厂实现对Bus抽象类的继承
    VehicleFactory(YUTONG ,'Bus');
    YUTONG.prototype.getPrice = function(){
      return this.price;
    },
    YUTONG.prototype.getPassengerNum= function(){
      return this.passenger;
    }
    
    // 奔驰汽车子类
    var BenzTruck= function(price,passenger){
      this.price = price;
      this.trainLoad = trainLoad;
    }
    // 抽象工厂实现对Bus抽象类的继承
    VehicleFactory(BenzTruck,'Truck');
    BenzTruck.prototype.getPrice = function(){
      return this.price;
    },
    BenzTruck.prototype.getTrainload = function(){
      return this.price;
    }
    
    var truck = new BenzTruck(1000,100);
    console.log(truck.getPrice()); // 1000
    console.log(truck.type); // truck
    

    相关文章

      网友评论

          本文标题:5.第二篇:第5章 抽象工厂模式

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