設計模式系列-抽象工廠模式
本文轉載自微信公眾號「花括號MC」,作者花括號MC。轉載本文請聯(lián)系花括號MC公眾號。
抽象工廠提供了一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。簡單來說是為需要創(chuàng)建多個相關聯(lián)產(chǎn)品的場景提供了解決思路。
舉個例子
很多軟件都支持配置不同的顏色的主題,當切換主題時,所有按鈕樣式和顏色都會統(tǒng)一切換。
假設我們的軟件只有三類按鈕,分別是Button, TextField,以及ComboBox,并且我們的軟件只提供兩類主題,即紅色主題和綠色主題。
來看一下UML :
再來看一下具體代碼如何實現(xiàn)。
先來創(chuàng)建一個SkinFactory接口
- public interface SkinFactory {
- Button createButton();
- TextField createTextField();
- ComboBox createComboBox();
- }
通過實現(xiàn)SkinFactory實現(xiàn)綠色主題工廠
- //紅色主題工廠
- public class RedSkinFactory implements SkinFactory {
- @Override
- public Button createButton() {
- return new RedButton();
- }
- @Override
- public TextField createTextField() {
- return new RedTextField();
- }
- @Override
- public ComboBox createComboBox() {
- return new RedComboBox();
- }
- }
紅色主題工廠類類似,因為篇幅原因不在單獨列出。
來看一下客戶端如何使用
- public class Client {
- public static void main(String[] args){
- //通過切換不同工廠,可以達到所有按鈕顏色都變換的效果
- SkinFactory skinFactory = new RedSkinFactory();
- Button button = skinFactory.createButton();
- ComboBox comboBox = skinFactory.createComboBox();
- TextField textField = skinFactory.createTextField();
- button.display();
- comboBox.display();
- textField.display();
- }
- }
總結
抽象工廠是創(chuàng)建模式之一,抽象工廠適合創(chuàng)建一系列有相關性的多個產(chǎn)品,雖然抽象工廠在擴展一個主題的按鈕時靈活方便,但是也有一定缺點, 最大缺點就是想單獨增加一個不屬于任何主題的按鈕時比較麻煩,比如上面的例子中,如果想增加一個關閉按鈕,這個按鈕即不屬于紅色主題也不屬于綠主題,那么改動起來就比較復雜。
工廠模式三兄弟:簡單工廠適合邏輯簡單,創(chuàng)建產(chǎn)品數(shù)量很少的場景,工廠模式適合創(chuàng)建獨立的產(chǎn)品,抽象工廠適合創(chuàng)建一系列有相關性的多個產(chǎn)品。