【學習筆記】建立模式之抽象工廠模式
阿新 • • 發佈:2019-02-19
之前工廠模式說到不明白工廠模式與簡單工廠的區別。後來想到,簡單工廠,每當新增一個具體產品時,需要在工廠中進行判斷修改;而工廠方法中,將工廠進行抽象,對產品進行細緻的生產,即要生產某個具體產品時,需要對應的具體工廠,新增產品時,需要新增一個新的對應的工廠類以及對應的具體產品類。
說起來有點繞,但聯絡上抽象工廠模式,或許能稍微理解。
抽象工廠模式提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類,它圍繞一個超級工廠來建立其他工廠
也就是說,抽象工廠模式中,建立的產品不再是一種產品了,而是多種產品(類族)了。
好比一個集團下有兩個品牌產品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產品");
}
}
假如以上是一個鍵鼠例子,每個工廠就是一個品牌工廠,雷蛇公司能生產雷蛇鍵鼠,牧人馬公司也能生產牧人馬牌子的鍵鼠。如果要新增一個羅技公司牌子的鍵鼠,只需要新增對應的工廠即可。但是假設這幾家公司要新增一個產品如生產雷蛇品牌的耳機,這時候修改起來,麻煩程度可想而知了。