1.抽象工厂模式介绍
抽象工厂模式定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。是工厂方法的升级版
为了更好的学习抽象工厂模式,我们先了解产品等级和产品族,相同的产品等级就是相同的产品,如:肯德基的汉堡包和麦当劳的汉堡包,虽然属于不同的餐饮店(工厂),但是属于同一等级的产品。而肯德基的汉堡包、肯德基的薯条 肯德基 炸鸡 肯德基的可乐都同属于一家店(工厂)的一系列相关产品。
抽象工厂模式,它强调了一系列相关对象(统一产品族)的创建过程,而工厂方法模式侧重于同一等级产品的创建,抽象工厂侧重同一产品族创建。也就是说抽象工厂模式下,一个工厂中生产的一系列对象都属于同一个产品族。
2.demo
还是以汉堡包 薯条 炸鸡为例
创建三个接口:汉堡包 薯条 炸鸡
1 public interface Chips { 2 public void chipsInfo(); 3 } 4 5 public interface FriedChicken { 6 public void friedChickenInfo(); 7 } 8 9 public interface Hamburger { 10 public void hambergerInfo(); 11 }
创建具体的产品类:
1 public class KFCChips implements Chips { 2 @Override 3 public void chipsInfo() { 4 System.out.println("肯德基薯条"); 5 } 6 } 7 8 public class KFCFriedChicken implements FriedChicken { 9 @Override 10 public void friedChickenInfo() { 11 System.out.println("肯德基炸鸡"); 12 } 13 } 14 15 public class KFCHamberger implements Hamburger { 16 @Override 17 public void hambergerInfo() { 18 System.out.println("肯德基汉堡"); 19 } 20 }
类图如下:
抽象工厂:
1 public interface Factory { 2 public Chips createChips(); 3 public FriedChicken createFriedChicken(); 4 public Hamburger createHamburger(); 5 }
创建具体的工厂类
1 public class KFCFactory implements Factory { 2 @Override 3 public Chips createChips() { 4 return new KFCChips(); 5 } 6 7 @Override 8 public FriedChicken createFriedChicken() { 9 return new KFCFriedChicken(); 10 } 11 12 @Override 13 public Hamburger createHamburger() { 14 return new KFCHamberger(); 15 } 16 }
在这个工厂里面生产的所有产品对象都不是一个产品等级,它属于同一个产品族,该工厂生产的一系列对象都是相关的。就像定义说的:抽象工厂模式提供一个创建一系列相关或者互相依赖对向的接口。
如果我们还希望创建麦当劳一系列产品,就可以扩展抽象接口创建一系列麦当劳产品类,创建麦当劳工厂生产麦当劳一系列产品
创建抽象的服务员以及具体的服务员:
1 public abstract class Waiter { 2 private Factory factory; 3 public abstract void order(); 4 5 public Waiter(Factory factory) { 6 this.factory = factory; 7 } 8 9 protected Factory getFactory() { 10 return factory; 11 } 12 13 protected void setFactory(Factory factory) { 14 this.factory = factory; 15 } 16 } 17 18 public class KFCWaiter extends Waiter { 19 public KFCWaiter(Factory factory) { 20 super(factory); 21 } 22 23 @Override 24 public void order() { 25 Chips chips = getFactory().createChips(); 26 chips.chipsInfo(); 27 FriedChicken friedChicken = getFactory().createFriedChicken(); 28 friedChicken.friedChickenInfo(); 29 Hamburger hamburger = getFactory().createHamburger(); 30 hamburger.hambergerInfo(); 31 } 32 }
测试:
1 public class Test { 2 public static void main(String[] args) { 3 Factory kfcFactory = new KFCFactory(); 4 Waiter waiter = new KFCWaiter(kfcFactory); 5 waiter.order(); 6 } 7 }
结果:
原文:https://www.cnblogs.com/kukufan/p/12448649.html