抽象工厂模式
一、概述
(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(); } }

四、优缺点
优点:工厂方法模式会产生多个工厂类,基于次劣势借助抽象工厂模式创建产品族对象,节省资源
缺点:一旦有新的产品产生,扩展起来麻烦(的修改工厂类、以及具体的实现类),不符合开闭原则

浙公网安备 33010602011771号