1. 程式人生 > 實用技巧 >抽象工廠模式

抽象工廠模式

一、概述

  (a)工廠方法模式吧用於建立具備一定等級結構的產品

   (b)抽象工廠是多個工廠方法模式的綜合應用,因為他要建立多個具備一定等級結構的產品(產品族)

二、原理分析

  抽象產品:漢堡、飲料

  具體產品: 雞腿堡 牛肉煲 牛奶、可樂

  抽象工廠:只能生產套餐(漢堡+飲料)

  具體工廠:肯德基(KFC)、麥當勞(MFC)

KFC:只能生產(牛肉煲+可樂)

MFC: 只能生產(雞肉堡+牛奶)  

 (例項)spring中cleinthttprequest中訊息頭訊息體的建立

三、測試程式碼分析

    1、抽象產品(漢堡、飲料)

      

//漢堡
public abstract
class 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 class
MilkDrinks 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();

    }
}

   

四、優缺點

  優點:工廠方法模式會產生多個工廠類,基於次劣勢藉助抽象工廠模式建立產品族物件,節省資源

  缺點:一旦有新的產品產生,擴充套件起來麻煩(的修改工廠類、以及具體的實現類),不符合開閉原則