1. 程式人生 > >【學習筆記】建立模式之抽象工廠模式

【學習筆記】建立模式之抽象工廠模式

之前工廠模式說到不明白工廠模式與簡單工廠的區別。後來想到,簡單工廠,每當新增一個具體產品時,需要在工廠中進行判斷修改;而工廠方法中,將工廠進行抽象,對產品進行細緻的生產,即要生產某個具體產品時,需要對應的具體工廠,新增產品時,需要新增一個新的對應的工廠類以及對應的具體產品類。
說起來有點繞,但聯絡上抽象工廠模式,或許能稍微理解。

抽象工廠模式提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類,它圍繞一個超級工廠來建立其他工廠

也就是說,抽象工廠模式中,建立的產品不再是一種產品了,而是多種產品(類族)了。
好比一個集團下有兩個品牌產品A、B,每個品牌都有一系列的產品A1、A2、…,B1、B2、…儘管產品不是同種型別,但是營銷模式下是一致的,都分為各種風格1、2…這些產品生產方式就是通過1工廠來生產1風格產品,2工廠來生產2風格產品…
這樣,每次要生產新的一個風格產品時,只需要新建一個對應工廠即可;
同樣缺點很明顯,當要新增一個新品牌時,需要在各個工廠實現修改。

//超級工廠,定義生產什麼品牌產品
public interface AbstractFactory {
	Product_A createA();
	Product_B createB();
}
//A品牌產品,品牌產品介面(同類族產品)
public interface Product_A {
	void display();
}
//B品牌產品,AB兩產品類族不同(如鍵盤和滑鼠)
public interface Product_B {
	void display();
}
//大眾風格工廠,每個工廠都能生產所有的品牌產品
public class BigFactory implements AbstractFactory
{ @Override public Product_A createA() { return new Pro_Big_A(); } @Override public Product_B createB() { return new Pro_Big_B(); } } //小眾風格產品 public class SmallFactory implements AbstractFactory{ @Override public Product_A createA() { return new Pro_Small_A(); } @Override public Product_B createB
() { return new Pro_Small_B(); } } //具體產品,如雷蛇鍵盤 public class Pro_Big_A implements Product_A{ @Override public void display() { System.out.println("大A產品"); } } //雷蛇滑鼠 public class Pro_Big_B implements Product_B{ @Override public void display() { System.out.println("大B產品"); } } //牧人馬鍵盤 public class Pro_Small_A implements Product_A{ @Override public void display() { System.out.println("小A產品"); } } //牧人馬滑鼠 public class Pro_Small_B implements Product_B{ @Override public void display() { System.out.println("小B產品"); } }

在這裡插入圖片描述

假如以上是一個鍵鼠例子,每個工廠就是一個品牌工廠,雷蛇公司能生產雷蛇鍵鼠,牧人馬公司也能生產牧人馬牌子的鍵鼠。如果要新增一個羅技公司牌子的鍵鼠,只需要新增對應的工廠即可。但是假設這幾家公司要新增一個產品如生產雷蛇品牌的耳機,這時候修改起來,麻煩程度可想而知了。