抽象工廠模式

之前我們對工廠方法模式已經有所了解了,那抽象工廠模式又是什么呢?

定義

為創建一組相關或者是相互依賴的對象提供一個接口,而不需要指定它們的具體類。

使用場景

如果一個或多個對象有相同的約束時,可以使用抽象工廠模式。那什么是有相同約束的對象呢?
舉個栗子,同樣是iPhone的處理器,但是可能是由三星或者臺積電分別代工生產的,如果用代碼模擬這個場景就可以考慮用抽象工廠模式。再比如不同型號的iPhone處理器有著不同的工藝制程,我們也可以用抽象工廠模式來模擬不同型號處理器的生產過程。

實現

抽象工廠模式一般由四大模塊組成:

  • 抽象產品類:每種產品要實現的統一接口
  • 具體的產品類:要創建的具體產品
  • 抽象工廠類:聲明若干創建產品(對象)的方法
  • 具體的工廠類:創建具體的產品

接下來我們用抽象工廠模式來模擬上述第一個例子。
首先創建一個抽象產品類:

public interface Processor {
    void processor();
}

因為由三星和臺積電共同代工,則具體的產品類應該有兩個,代表是三星生產的還是臺積電生產的:

public class SamsungProcessor implements Processor{
    @Override
    public void processor() {
        Log.e("SamsungProcessor", "三星代工的處理器");
    }
}
public class TSMCProcessor implements Processor{
    @Override
    public void processor() {
        Log.e("TSMCProcessor", "臺積電代工的處理器");
    }
}

產品有了,就可以著手建廠了,創建一個抽象工廠類:

public abstract class ProcessorFactory {
    public abstract Processor createProcessor();
}

接下來創建兩個具體的工廠類:三星和臺積電的工廠

public class SamsungProcessorFactory extends ProcessorFactory{
    @Override
    public Processor createProcessor() {
        return new SamsungProcessor();
    }
}

public class TSMCProcessorFactory extends ProcessorFactory {
    @Override
    public Processor createProcessor() {
        return new TSMCProcessor();
    }
}

到這里我們提到的四大模塊就都有了,做個測試吧:

public class Client {
    public static void test() {
        //生產三星代工的處理器
        SamsungProcessorFactory samsungProcessorFactory = new SamsungProcessorFactory();
        samsungProcessorFactory.createProcessor().processor();

        //生產臺積電代工的處理器
        TSMCProcessorFactory tsmcProcessorFactory = new TSMCProcessorFactory();
        tsmcProcessorFactory.createProcessor().processor();
    }
}

這是最終的log:


result

如果手機的屏幕、鏡頭模組、內存等部件也分別由不同的廠商供應,對應到代碼中就需要增加相應的工廠類和產品類,這樣就導致類文件數量激增,對項目而言并不是一件好事,所以在實際開發中還是要權衡利弊。

對比工廠方法模式,核心的四大模塊都是一樣的,但是構造的過程卻是不同的,在工廠方法模式中,只有一個具體的工廠,而在抽象工廠模式中可能會有多個具體的工廠,因為相同或類似的產品我們可以找多個工廠幫我們生產。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容