###抽象工廠模式 設計
####抽象工廠模式優勢:code
抽象工廠模式隔離了具體類的生產,使得客戶並不須要知道什麼被建立。對象
當一個產品族中的多個對象被設計成一塊兒工做時,它能保證客戶端始終只使用同一個產品族中的對象。產品
增長新的具體工廠和產品族很方便,無須修改已有系統,符合「開閉原則」。ast
####抽象工廠模式缺點:class
####代碼實現im
//早餐工廠 public interface BreakfastFactory { Food makeFood(); Drink makeDrink(); } //飲料工廠 public interface Drink { void drink(); } //實現類 public class EastDrink implements Drink { public void drink() { System.out.println("喝豆漿"); } } public class WestDrink implements Drink { public void drink() { System.out.println("喝牛奶"); } } //主食工廠 public interface Food { void eat(); } //實現類 public class EastFood implements Food { public void eat() { System.out.println("吃油條"); } } public class WestFood implements Food { public void eat() { System.out.println("吃麪包"); } } //早餐工廠實現類(中式早餐) public class EastBreakfast implements BreakfastFactory { public Food makeFood() { return new EastFood(); } public Drink makeDrink() { return new EastDrink(); } } //西式早餐 public class WestBreakfast implements BreakfastFactory { public Food makeFood() { return new WestFood(); } public Drink makeDrink() { return new WestDrink(); } } public class Client { public static void main(String[] args) { System.out.println("**********第一天吃西餐***********"); BreakfastFactory breakfast = new WestBreakfast(); breakfast.makeDrink().drink(); breakfast.makeFood().eat(); System.out.println("**********第一天吃中餐***********"); breakfast = new EastBreakfast(); breakfast.makeDrink().drink(); breakfast.makeFood().eat(); } } 運行結果: **********第一天吃西餐*********** 喝牛奶 吃麪包 **********第一天吃中餐*********** 喝豆漿 吃油條
####根據代碼優缺點分析客戶端
優勢項目
若是咱們想是一箇中西式的早餐,好比:喝牛奶吃油條,這個很容易實現,咱們只須要一個實現早餐工廠的類,即可以建立牛奶喝油條。static
缺點 若是咱們又想添加一個飯後項目,好比西方飯前禱告,中方飯前祝酒,這樣就得添加一個飯前的工廠,這樣的話須要修改早餐工廠和其具體的實現類(西式早餐喝中式早餐)