抽象工廠模式
抽象工廠模式,對方法工廠模式進行抽象。世界各地都有自己的水果園,我們將這些水果園抽象為一個水果園接口,在中國、英國和美國都有水果園,種植不同的水果,比如蘋果、香蕉和梨等。這里將蘋果進行抽象,所以,蘋果又分為中國蘋果,英國蘋果和美國蘋果。中國的水果園中有蘋果、香蕉和梨等。抽象工廠中聲明生產蘋果、香蕉和梨等水果,那么具體的工廠相當於中國、英國和美國的水果園,各個水果園負責生產水果、香蕉和梨等。
1.相關術語
-
產品等級結構:產品的繼承結構,與類的繼承相似。例如蘋果是一個抽象的類,那么中國蘋果、美國蘋果和英國的蘋果就是其子類。
-
產品族:指同一個工廠生產的,位於不同的產品等級結構的一組產品。例如蘋果、香蕉和梨都產自中國,水果的等級結構不同,構成一個產品族。
-
抽象工廠:是一個接口,抽象工廠模式的核心,包含對多個產品等級結構的聲明,任何工廠類都必須實現這個接口。
- 具體工廠:是抽象工廠的實現,負責實例化某個產品族中的產品對象。例如中國工廠生產蘋果、香蕉和梨這些產品。

4.創建Fruit接口、Apple抽象類、ChinaApple類等
Fruit(interface):
public interface Fruit { public void get(); }
Apple抽象類:
public abstract class Apple implements Fruit{ public abstract void get(); }
ChinaApple類:
public class ChinaApple extends Apple { @Override public void get() { System.out.println("中國的蘋果..."); } }
5.創建抽象工廠、具體工廠
抽象工廠:
public interface FruitFactory { //實例化蘋果 public Fruit getApple(); //實例化香蕉 public Fruit getBanana(); }
具體工廠:
public class ChinaFactory implements FruitFactory { @Override public Fruit getApple() { return new ChinaApple(); } @Override public Fruit getBanana() { return new ChinaBanana(); } }
public class MainClass { public static void main(String[] args){ //創建中國工廠 FruitFactory chinaFactory = new ChinaFactory(); //通過中國工廠生產中國蘋果實例 Fruit apple = chinaFactory.getApple(); apple.get(); //通過中國工廠生產中國香蕉實例 Fruit banana = chinaFactory.getBanana(); banana.get(); //創建英國工廠 FruitFactory englandFactory = new EnglandFactory(); //通過英國工廠生產英國蘋果實例 Fruit apple1 = englandFactory.getApple(); apple1.get(); //通過英國工廠生產英國香蕉實例 Fruit banana2 = englandFactory.getBanana(); banana2.get(); } }
8.總結
模式來源於生活。抽象工廠模式,對工廠方法模式進行了升級。對產品進行了進一步的抽象,同時改變了抽象工廠和具體工廠的設計模式。這種模式便於橫向的擴展,例如我們想添加一個美國工廠來生產蘋果和香蕉,只需要新建美國蘋果,美國香蕉和生產這兩種水果的具體工廠--美國工廠。缺點就是不利於縱向的擴展,例如我們想在工廠中生產梨,這就需要修改抽象工廠,各個具體工廠也同時需要修改。


