###抽象工厂模式 设计
####抽象工厂模式优势: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
缺点 若是咱们又想添加一个饭后项目,好比西方饭前祷告,中方饭前祝酒,这样就得添加一个饭前的工厂,这样的话须要修改早餐工厂和其具体的实现类(西式早餐喝中式早餐)