抽象工廠模式
阿新 • • 發佈:2020-08-12
一、概述
(a)工廠方法模式吧用於建立具備一定等級結構的產品
(b)抽象工廠是多個工廠方法模式的綜合應用,因為他要建立多個具備一定等級結構的產品(產品族)
二、原理分析
抽象產品:漢堡、飲料
具體產品: 雞腿堡 牛肉煲 牛奶、可樂
抽象工廠:只能生產套餐(漢堡+飲料)
具體工廠:肯德基(KFC)、麥當勞(MFC)
KFC:只能生產(牛肉煲+可樂)
MFC: 只能生產(雞肉堡+牛奶)
(例項)spring中cleinthttprequest中訊息頭訊息體的建立
三、測試程式碼分析
1、抽象產品(漢堡、飲料)
//漢堡 public abstractclass Hamburg { //子類擴充套件相應功能(牛肉煲、雞肉堡) public abstract void making(); } //飲料 public abstract class Drinks { // //子類擴充套件相應功能(可樂、奶茶) public abstract void making(); }
2、具體產品
//雞肉堡 public class ChickenBurger extends Hamburg { @Override public void making() { System.out.println("雞肉堡"); } } //牛肉煲 public class BeefBurger extends Hamburg{ @Override public void making() { System.out.println("牛肉煲"); } } //可樂 public class CokeDrinks extends Drinks{ @Override public void making() { System.out.println("可樂"); } } //奶茶 public classMilkDrinks extends Drinks{ @Override public void making() { System.out.println("奶茶"); } }
3、抽象工廠
//抽象食品工廠 public abstract class AbstractFoodFactory { //建立漢堡 public abstract Hamburg createHamburg() ; //建立飲料 public abstract Drinks createDrinks() ; }
4、具體工廠
//KFC 套餐(牛肉煲 可樂) public class KFCFactory extends AbstractFoodFactory{ @Override//牛肉煲 public Hamburg createHamburg() { return new BeefBurger(); } @Override//可樂 public Drinks createDrinks() { return new CokeDrinks(); } } //MFC 套餐2(雞肉堡 奶茶) public class MFCFactory extends AbstractFoodFactory{ @Override//雞肉堡 public Hamburg createHamburg() { return new ChickenBurger(); } @Override//奶茶 public Drinks createDrinks() { return new MilkDrinks(); } }
5、測試
public class Test { public static void main(String[] args) { //套餐A(牛肉煲 可樂) KFCFactory kfc=new KFCFactory(); Hamburg beef=kfc.createHamburg(); Drinks coke=kfc.createDrinks(); //套餐B(雞肉堡 奶茶) MFCFactory mfc=new MFCFactory(); Drinks milk=mfc.createDrinks(); Hamburg chicken=mfc.createHamburg(); System.out.println("KFC 生產套餐A:"); beef.making(); coke.making(); System.out.println("MFC 生產套餐B"); chicken.making(); milk.making(); } }
四、優缺點
優點:工廠方法模式會產生多個工廠類,基於次劣勢藉助抽象工廠模式建立產品族物件,節省資源
缺點:一旦有新的產品產生,擴充套件起來麻煩(的修改工廠類、以及具體的實現類),不符合開閉原則