设计模式学习-(4.抽象工厂模式)

本文探讨了抽象工厂模式,通过JavaScript模拟其他语言中的抽象函数和虚函数操作。抽象工厂模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。与简单工厂和工厂方法模式相比,它更关注于创建一组相关的对象。
摘要由CSDN通过智能技术生成

说到抽象工厂,如果有接触过别的语言的话,其他语言 大概都有个 虚函数和抽象函数,然后继承的自雷重写这个方法。


利用js 也可以模拟这种操作。


在这里,抽象化创建模式不是一个真实的对象实例,而是一个类簇,制定了类的结构,这也就区别于简单工厂模式创建

单一对象,工厂模式创建多类对象。


//  抽象工厂方法

var VirtualFactory = function ( subType , superType ) {
        // 判断抽象工厂是否有该抽象类
        if( typeof VirtualFactory[superType] === 'function' ){
            // 缓存类
            function F(){}
            // 继承弗雷属性和方法,类式继承,引用类型(函数,对象,数组等)会被实例化子类公用
            F.prototype = new VirtualFactory[superType]() ;
            F.constructor = subType;
            subType.prototype = new F();
        }else{
            throw new Error('未创建该抽象类');
        }
    };
    // 小汽车抽象类
    VirtualFactory.Car = function () {
        this.type = 'car';
    };
    VirtualFactory.Car.prototype = {
        getPrice: function () {
            return new Error('抽象方法不能调用');
        },
        getSpeed: function () {
            return new Error('抽象方法不能调用');
        }
    };
    // 公交车抽象类
    VirtualFactory.Bus = function () {
        this.type = 'bus';
    };
    VirtualFactory.Bus.prototype = {
        getPrice: function () {
            return new Error('抽象方法不能调用');
        },
        getPassengerNum: function () {
            return new Error('抽象方法不能调用');
        }
    };
    // 货车抽象类
    VirtualFactory.Trunk = function () {
        this.type = 'trunk';
    };
    VirtualFactory.Trunk.prototype = {
        getPrice: function () {
            return new Error('抽象方法不能调用');
        },
        getTrainload: function () {
            return new Error('抽象方法不能调用');
        }
    };
    
    // 宝马汽车类
    var BMW = function ( price , speed) {
        this.price = price;
        this.speed = speed;
    };
    VirtualFactory( BMW , 'Car' );
    BMW.prototype.getPrice = function () {
        console.log( this.price );
    };


    var c1 = new BMW( '30W' , '200km/s');
    c1.getPrice();
    console.log( c1.getSpeed() );



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值