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

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

作者: 简爱_cdde | 来源:发表于2018-12-11 19:14 被阅读0次

/*

        抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类族的创建,而不负责创建某一类产品的实例;

        出现的都是幻觉--抽象工厂方法

        */

        /*  例子:

            我们定义一个类,在类的原型上定义了来个方法,但是在调用的时候会报错,

            但是在被子类继承后可以进行重写这些方法

        */

        /*  var Car = function () { }

          Car.prototype = {

              getPrice: function () {

                  return new Error("抽象方法不能被调用")

              },

              getSpeed: function () {

                  return new Error("抽象方法不能被调用")

              }

          }

  */

        /*

            抽象工厂方法:我们用它作为父类来创建子类,也就是说这个工厂里面的方法都是无法被使用的,

            只能是被继承然后在子类中被修改;不能用它来创建一个真实的对象

            例子:

        */

        /*

        抽象工厂方法:

        其实是一个实现子类继承父类的方法。在这个方法中我们需要通过传递子类以及要继承的父类的名称,

        并且在抽象工厂方法中又添加了一次对抽象类存在性的判断,如果存在则将子类继承父类的方法,

        然后子类通过寄生式继承,继承父类的过程中还有一个地方需要注意,就是在过渡类的原型继承时,我们不是继承

        父类的原型,而是通过new关键字复制父类的一个实例,这么做是因为过度类不仅仅继承弗雷德原型方法还要继承

        父类的对象属性,所以要通过new关键字将父类的构造函数执行一遍来复制构造函数中的属性和方法,对抽象工厂添加

        抽象类也很特殊,因为抽象工厂是个方法,不需要实例化,故只需要一份,因此直接为抽象工厂添加类的属性即可,

        */

        /*

            抽象工厂的作用是知道每个子类到底是哪一种类别的,然后他们也具备了该类所必备的属性和方法

        */

        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.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;

        }

        //抽象工厂实现对于car抽象类的继承

        VehicleFactory(BMW, "Car")

        BMW.prototype.getPrice = function () {

            return this.price;

        }

        BMW.prototype.getSpeed = function () {

            return this.speed;

        }

        var b = new BMW(100, 100);

        console.log(b.getPrice())

相关文章

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

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

  • 常用设计模式

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

  • 单件设计模式

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

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

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

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

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

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

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

  • 2021-11-16 - 学习记录

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

  • 创建型设计模式

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

  • 设计模式三、工厂模式

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

  • 抽象工厂模式

    抽象工厂设计模式 介绍 抽象工厂设计模式是设计模式中“创建型模式”中的一种,它是用来创建其它工厂的超级工厂。所以该...

网友评论

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

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