抽象工廠模式:提供一個接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類。
抽象工廠允許客戶使用抽象的接口來創(chuàng)建一組相關(guān)的產(chǎn)品,而不需要知道實際產(chǎn)出的具體產(chǎn)品是什么。
烤魚之抽象工廠模式類圖: 類A,B實現(xiàn)了接口TiaoLiao,分別是調(diào)料A,調(diào)料B。FactoryA,F(xiàn)actoryB是AbstractFactory的子類,通過create方法來實例化TiaoLiao。
TiaoLiao接口代碼實現(xiàn):
public interface TiaoLiao {}A類代碼實現(xiàn):
public class A implements TiaoLiao{ public A(){ System.out.B類代碼實現(xiàn):public class B implements TiaoLiao{ public B(){ System.out.println("調(diào)料B"); }}AbstractFactory類代碼實現(xiàn):
public abstract class AbstractFactory { public abstract TiaoLiao create();}FactoryA類代碼實現(xiàn):
public class FactoryA extends AbstractFactory{ @Override public TiaoLiao create() { // TODO Auto-generated method stub return new A(); }}FactoryB類代碼實現(xiàn):
public class FactoryB extends AbstractFactory{ @Override public TiaoLiao create() { // TODO Auto-generated method stub return new B(); }}KaoYu類代碼實現(xiàn):
public class KaoYu { AbstractFactory abstractFactory; public KaoYu(AbstractFactory abstractFactory){ this.abstractFactory = abstractFactory; } public TiaoLiao orderFish(){ return abstractFactory.create(); }}測試類AbstractFactoryTest代碼實現(xiàn):
public class AbstractFactoryTest { public static void main(String[] args){ AbstractFactory abstractFactory = new FactoryA(); KaoYu kaoYu = new KaoYu(abstractFactory); kaoYu.orderFish(); AbstractFactory abstractFactory2 = new FactoryB(); KaoYu kaoYu2 = new KaoYu(abstractFactory2); kaoYu2.orderFish(); }}運(yùn)行結(jié)果:
調(diào)料A調(diào)料B新聞熱點
疑難解答