抽象工厂模式

一、概述

  (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();

    }
}

   

四、优缺点

  优点:工厂方法模式会产生多个工厂类,基于次劣势借助抽象工厂模式创建产品族对象,节省资源

  缺点:一旦有新的产品产生,扩展起来麻烦(的修改工厂类、以及具体的实现类),不符合开闭原则  

posted @ 2020-08-12 18:14  StrangerIt  阅读(180)  评论(0)    收藏  举报