抽象工厂模式
什么是抽象工廠
抽象工廠模式(Abstract Factory Pattern)是一種軟件開發設計模式。抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨的工廠封裝起來。如果比較抽象工廠模式和工廠模式,我們不難發現前者只是在工廠模式之上增加了一層抽象的概念。抽象工廠是一個父類工廠,可以創建其它工廠類。所以我們也叫它 “工廠的工廠”。
抽象工廠模式類圖
現在,假設我們有 A、B 兩個廚房。每個廚房擁有的餐具和食品都不一樣,但是用戶搭配使用的方式,比如刀子和蘋果、杯子和牛奶等等,我們假設是一致的。
示例代碼
//具體餐具knif如下 class Knife implements TableWare{public String getToolName(){return "knife";} }//以具體工Akitchen為例 class AKitchen implements KitchenFactory{public Food getFood(){return new Apple();}public TableWare getTableWare(){return new Knife();} }//吃貨要開吃了 public class Foodaholic{public void eat(KitchenFactory k){System.out.println("A foodaholic is eating "+k.getFood().getFoodName()+" with "+k.getTableWare().getToolName());}public static void main(String[] args){Foodaholic fh = new Foodaholic();KitchenFactory kf = new AKitchen();fh.eat(kf);} }打開terminal,輸入命令編譯并運行:
javac Foodaholic.java java Foodaholic運行結果:
shiyanlou:project/ $ javac Foodaholic.java [17:16:37] shiyanlou:project/ $ java Foodaholic [17:16:51] A foodaholic is eating apple with knife抽象工廠模式應用
抽象工廠模式特別適合于這樣的一種產品結構:產品分為幾個系列,在每個系列中,產品的布局都是類似的,在一個系列中某個位置的產品,在另一個系列中一定有一個對應的產品。這樣的產品結構是存在的,這幾個系列中同一位置的產品可能是互斥的,它們是針對不同客戶的解決方案,每個客戶都只選擇其一。
工廠方法模式與抽象工廠模式區別
為了解釋得更清楚,先介紹兩個概念:
產品等級結構:比如一個抽象類是食物,其子類有蘋果、牛奶等等,則抽象食物與具體食物名稱之間構成了一個產品等級結構。食物是抽象的父類,而具體的食物名稱是其子類。產品族:在抽象工廠模式中,產品族是指由同一個工廠生產的,位于不同產品等級結構中的一組產品。如 AKitchen 生產的蘋果、刀子,蘋果屬于食物產品等級結構中,而刀子則屬于餐具產品等級結構中。而 BKitchen 可能生成另一組產品,如牛奶、杯子。因此工廠方法模式、抽象工廠模式最大的區別在于:
工廠方法模式:針對的是 一個產品等級結構。
抽象工廠模式:針對 多個產品等級結構。
總結
- 上一篇: 【源码在文末】SpringSession
- 下一篇: 单片机的流水灯程序