1. 程式人生 > >js設計模式第五章 抽象工廠模式 讀書筆記

js設計模式第五章 抽象工廠模式 讀書筆記

抽象工廠模式(Abstract Factory) 通過類的抽象使得業務適用於一個產品類簇的建立,而不負責建立某一類產品的例項。
JS中是沒有直接的抽象類的,因此我們需要在類的方法中丟擲錯誤來模擬抽象類,如果繼承的子類中沒有覆寫該方法而呼叫,就會丟擲錯誤。

//汽車抽象類
var Car = function(){};
Car.prototype = {
    getPrice: function(){
        return new Error( "抽象方法不能直接呼叫" );
    }
}

子類繼承父類,如果沒有重寫父類的方法而使用,會報錯。

我們不能使用它來建立一個真實的物件,一般用來作為父類來建立一些子類

    var AbstractFactory = function(subType,superType){
        //判斷抽象工廠種是否有這個抽象類
        if(typeof(AbstractFactory[superType])=='function'){
            //快取類
            function F(){};
            //繼承父類屬性和方法
            F.protorype = new AbstractFactory[superType]();
            //將子類constructor指向子類
            subType.constructor = subType;
            //子類原型繼承"父類"
            subType.prototype = new F();
        }else{
            //不存在該抽象類丟擲錯誤
            throw new Error('未建立該抽象類');
        }
    }
    //小汽車抽象類
    AbstractFactory.Car = function(){
        this.type = 'Car';
    }
    AbstractFactory.Car.prototype = {
        getPrice : function(){
            return new Error('抽象方法不能呼叫!');
        }
    }

抽象工廠其實是一個實現子類繼承父類的方法,在這個方法中我們需要傳入子類以及要繼承父類的名稱。 
過渡類的原型繼承,不是繼承父類的原型,而是通過new 複製一個父類的例項,過渡類不僅僅繼承了父類的原型方法,還繼承了父類的物件屬性. 

var BMW = function(price){
    this.price = price;
}
//抽象工廠實現對Car抽象類的繼承
AbstractFactory(BMW,'Car');
BMW.prototype.getPrice = function(){
    return this.price;
}
var bmw = new BMW(100000);
console.log(bmw.getPrice());

歡迎大神多多指點。qq:274501366