• javascript-抽象工厂模式



    抽象工厂模式笔记
       1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)
       2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽象类进行判断,不是则抛出错误
       3.子类通过抽象工厂方法(寄生式继承)继承父类(抽象工厂创建的抽象类)的属性和方法
     原型式继承

    1             function inheritobject(o){
    2                 //声明一个过渡函数对象
    3                 function F(){    
    4                 }
    5                 //过渡原型对象继承父对象
    6                 F.prototype=o;
    7                 //返回过渡对象的一个实列,该实例的原型继承了父对象
    8                 return new F();
    9             }

    寄生式继承 继承原型

     1             /*
     2              *寄生式继承 继承原型
     3              * 传递参数subclass 子类
     4              * 传递参数superclass 父类
     5              * */
     6             function inheritPrototype(subclass,superclass){
     7                 //复制一份父类的原型副本保存在变量中
     8                 var p=inheritobject(superclass.prototype);
     9                 //修正因为重写子类原型导致子类的constructor属性被修改
    10                 p.constructor=subclass;
    11                 //设置子类原型
    12                 subclass.prototype=p;
    13             }

    抽象工厂方法

    1             //抽象工厂方法
    2             var VehicleFactory=function(subtype,supertype){
    3                 //supertype通过typeof判断是否是抽象工厂模式创建的抽象类
    4                 if(typeof VehicleFactory[supertype] === 'function'){
    5                     inheritPrototype(subtype,supertype);
    6                 }else{
    7                     throw new Error('未创建该抽象类');
    8                 }
    9             }

    抽象工厂方法创建抽象类

     1            VehicleFactory.Car=function(){
     2                 this.type='car';
     3             }
     4             
     5             VehicleFactory.Car.prototype={
     6                 getPrice:function(){
     7                     return new Error("抽象方法不能调用");
     8                 },
     9                 getSpeed:function(){
    10                     return new Error("抽象方法不能调用");
    11                 },
    12                 getColor:function(){
    13                     return new Error("抽象方法不能调用");
    14                 }
    15             }
    16             
    17             VehicleFactory.Bus=function(){
    18                 this.type='bus';
    19             }
    20             VehicleFactory.Bus.prototype={
    21                 getPrice:function(){
    22                     return new Error("抽象方法不能调用");
    23                 },
    24                 getSpeed:function(){
    25                     return new Error("抽象方法不能调用");
    26                 }
    27             }

    宝马汽车子类

     1            var BMW =function(price,speed){
     2                 this.price=price;
     3                 this.speed=speed;
     4             }
     5             //抽象工厂实现对Car抽象类 的继承
     6             VehicleFactory(BMW,'Car');
     7             BMW.prototype.getPrice = function(){
     8                 return this.price;
     9             }
    10             BMW.prototype.getSpeed = function(){
    11                 return this.speed;
    12             }

    测试代码

    1             var BMWObject = new BMW(100,100);
    2             console.log(BMWObject.getPrice());
    3             console.log(BMWObject.getColor());
  • 相关阅读:
    分页技术-总结
    整合GreyBox放大显示图片
    java web开发 图片上传功能
    我的fckeditor实践
    fckeditor使用(转)
    hibernate主键生成策略(转载)
    JfreeChart使用(转载)
    投票系统开发总结struts2,jfreechart,cookie应用,以及前端技术
    Spring MVC + MyBatis整合(IntelliJ IDEA环境下)
    动态代理
  • 原文地址:https://www.cnblogs.com/jtnote/p/5981693.html
Copyright © 2020-2023  润新知