工廠方法模式:定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。
烤魚店之工廠模式類圖: FactoryFish中的Fish實例化延遲到子類NianYuFactory,JiYuFactory中來實例化。這是工廠方法模式和簡單工廠模式的區別。
Fish類代碼實現:
public class Fish { String name = "Unknow name";}NianYu類代碼實現:
public class NianYu extends Fish{ public NianYu() { // TODO Auto-generated constructor stub name = "鯰魚"; System.out.JiYu類代碼實現:public class JiYu extends Fish{ public JiYu() { // TODO Auto-generated constructor stub name = "鯽魚"; System.out.println("一條烤"+name); }}FactoryFish類代碼實現:
public abstract class FactoryFish { public abstract Fish createFish(); }NianYuFactory類代碼實現:
public class NianYuFactory extends FactoryFish{ @Override public Fish createFish() { // TODO Auto-generated method stub return new NianYu(); }}JiYuFactory類代碼實現:
public class JiYuFactory extends FactoryFish{ @Override public Fish createFish() { // TODO Auto-generated method stub return new JiYu(); }}KaoYu類代碼實現:
public class KaoYu { FactoryFish factoryFish; public KaoYu(FactoryFish factoryFish){ this.factoryFish =factoryFish; } public void orderFish(){ factoryFish.createFish(); }}FishTest類代碼實現:
public class FishTest { public static void main(String[] args){ FactoryFish factoryFish = new JiYuFactory(); KaoYu kaoYu = new KaoYu(factoryFish); kaoYu.orderFish(); FactoryFish factoryFish2 = new NianYuFactory(); KaoYu kaoYu2 = new KaoYu(factoryFish2); kaoYu2.orderFish(); }}運行結果:
一條烤鯽魚一條烤鯰魚新聞熱點
疑難解答