抽象工厂模式

抽象工厂模式(Abstract Factory):通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例。
抽象类即定义一个产品簇,并声明一些必备的方法,如果子类没有去重写方法调用时会抛出错误。
抽象类创建的对象是抽象的,所以不能使用它来创建一个真实的对象,一般用它作为父类创建一些子类。

//抽象工厂方法
var VehicleFactory = function(subType,superType){
    //判断抽象工厂中是否有该抽象类
    if(typeof VehicleFactory[superType] === 'function'){
        //缓存类
        funtion 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('抽象方法不能调用');
    }
}

抽象工厂是用来创建子类的,所以需要一些产品子类,让子类继承相应的产品簇抽象类

//宝马汽车子类
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 Lamborghini = function(price,speed){
    this.price = price;
    this.speed = speed;
}
//抽象工厂实现对Car抽象类的继承
VehicleFactory(Lamborghini,'Car')
Lamborghini.prototype.getPrice = function(){
    return this.price;
};
Lamborghini.prototype.getSpeed = function(){
    return this.speed;
}
设计模式 文章被收录于专栏

设计模式

全部评论

相关推荐

程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
找个工作 学历是要卡的 要求是高的 技能不足是真的 实习经验是0的 简历无处可写是事实的 钱不好赚是真的 想躺平又不敢躺 也不甘心躺 怕自己的灵感和才华被掩埋甚至从未被自己发现 又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务