簡(jiǎn)單工廠模式(Simple Factory Pattern)又叫靜態(tài)工廠方法模式(Static FactoryMethod Pattern),是通過專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。當(dāng)你需要什么,只需要傳入一個(gè)正確的參數(shù),就可以獲取你所需要的對(duì)象,而無須知道其創(chuàng)建細(xì)節(jié)。
簡(jiǎn)單工廠模式其實(shí)不是一個(gè)設(shè)計(jì)模式,反而比較像是一種編程習(xí)慣。但由于經(jīng)常被使用,所以我們先來學(xué)習(xí)。
用簡(jiǎn)單工廠模式寫的烤魚店實(shí)例類圖如下:
客人通過KaoYu類的orderFish()方法來點(diǎn)單,SimpleFishFactory類的orderFish()負(fù)責(zé)創(chuàng)建不同烤魚類型,F(xiàn)ish是烤魚父類,CaoYu,NianYu,JiYu,LuYu是具體實(shí)現(xiàn)。
Fish類代碼實(shí)現(xiàn):
public class Fish { String name = "Unknow name"; public String getname(){ return name; }}CaoYu類代碼實(shí)現(xiàn):
public class CaoYu extends Fish{ public CaoYu(){ name = "草魚"; System.out.NianYu類代碼實(shí)現(xiàn):public class NianYu extends Fish{ public NianYu(){ name = "鯰魚"; System.out.println("烤"+name); }}JiYu類代碼實(shí)現(xiàn):
public class JiYu extends Fish{ public JiYu(){ name = "鯽魚"; System.out.println("烤"+name); }}LuYu類代碼實(shí)現(xiàn):
public class LuYu extends Fish{ public LuYu(){ name = "鱸魚"; System.out.println("烤"+name); }}SimpleFishFactory類代碼實(shí)現(xiàn):
public class SimpleFishFactory { public Fish createFish(String type){ if (type.equals("CaoYu")) { return new CaoYu(); }else if (type.equals("NianYu")) { return new NianYu(); }else if (type.equals("JiYu")) { return new JiYu(); }else if (type.equals("LuYu")) { return new LuYu(); } return null; }}createFish方法根據(jù)傳進(jìn)來的不同參數(shù),返回一個(gè)對(duì)應(yīng)的對(duì)象。
KaoYu類代碼實(shí)現(xiàn):
public class KaoYu { SimpleFishFactory factory; public KaoYu(SimpleFishFactory factory){ this.factory = factory; } public Fish orderFish(String type){ Fish fish; fish = factory.createFish(type); System.out.println("我是一條烤"+fish.getname()); return fish; }}KaoYu類傳進(jìn)來一個(gè)SimpleFishFactory對(duì)象,然后orderFish根據(jù)type來返回一個(gè)對(duì)應(yīng)的對(duì)象。
測(cè)試類KaoYuTest代碼實(shí)現(xiàn):
public class KaoYuTest { public static void main(String[] args){ SimpleFishFactory factory = new SimpleFishFactory(); KaoYu kaoYu = new KaoYu(factory); kaoYu.orderFish("JiYu"); }}執(zhí)行結(jié)果:
烤鯽魚我是一條烤鯽魚新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注