1. 程式人生 > >23種設計模式之抽象工廠

23種設計模式之抽象工廠

目錄

1.簡介

2.優點

3.缺點

4.形式

1.簡介

抽象工廠模式是為建立一組相關或相互依賴的物件提供的一個介面,並且無需指定具體的類。很明顯,它是工廠模式的升級版。之前的工廠模式一個工廠就可以了,現在有種情況是工廠模式無法滿足的,就是如果產品之間具有一種相互關係,就只能用抽象工廠模式了。

2.優點

同樣是具有了很好的封裝性,並且產品之間的相互關係將處於一種非公開的狀態。

3.缺點

橫向擴充套件容易,縱向擴充套件困難。橫向擴充套件是從源頭開始擴充套件,即從產品進行擴充套件,再新建工廠組裝,符合開閉原則;而縱向擴充套件是需要修改工廠介面,對其中的方法進行更改,這嚴重違法了開閉原則。

4.形式

這裡以兩種產品的互動展開,抽象A產品類

public abstract class AProductA {
    public void shareMethod(){}
    public void ownMethod(){}
}

抽象A產品類1實現

public class ProductA1 extends AProductA {
    public void ownMethod() {
        System.out.println("A1產品");
    }
}

抽象A產品類2實現

public class ProductA2 extends AProductA {
    public void ownMethod() {
        System.out.prinln("A2產品");
    }
}

抽象B產品類

public abstract class AProductB {
    public void shareMethod(){}
    public void ownMethod(){}
}

抽象B產品類1實現

public class ProductB1 extends AProductB {
    public void ownMethod() {
        System.out.println("B1產品");
    }
}

抽象B產品類2實現

public class ProductB2 extends AProductB {
    public void ownMethod() {
        System.out.prinln("B2產品");
    }
}

抽象工廠類

public abstract class AFactory {
    public abstract AProductA makeProductA();
    public abstract AProductB makeProductB();
}

A工廠的做法是

public class FactoryA extends AFactory {
    public AProductA makeProductA() {
        return new ProductA1();
    }

    public AProductB makeProductB() {
        return new ProductB1();
    }
}

B工廠的做法是

public class FactoryB extends AFactory {
    public AProductA makeProductA() {
        return new ProductA2();
    }

    public AProductB makeProductB() {
        return new ProductB2();
    }
}