簡單工廠模式,就是有一個工廠類,負責生成所需要的實體類。 這讓我想起了紅警,在紅警里,如果需要造一輛坦克,需要先有一個戰車工廠,在坦克工廠里選擇坦克類型,然後坦克工廠才會生成所需要的坦克。 不多說直接上代碼。 首先有個坦克類Panzer(哈哈我的俠盜獵車似乎就記得這麼一個作弊秘籍了) 有兩個類型的坦 ...
簡單工廠模式,就是有一個工廠類,負責生成所需要的實體類。
這讓我想起了紅警,在紅警里,如果需要造一輛坦克,需要先有一個戰車工廠,在坦克工廠里選擇坦克類型,然後坦克工廠才會生成所需要的坦克。
不多說直接上代碼。
首先有個坦克類Panzer(哈哈我的俠盜獵車似乎就記得這麼一個作弊秘籍了)
public class Panzer { protected String name; public void move(){ System.out.println(name+"移動了!"); } }
有兩個類型的坦克,一個是灰熊坦克,一個是光凌坦克
public class BearPanzer extends Panzer{ public BearPanzer(){ name="灰熊坦克"; System.out.println(name+"製造完成"); } } public class EdgelightPanzer extends Panzer{ public EdgelightPanzer(){ name="光棱坦克"; System.out.println(name+"製造完成"); } }
提前準備好咱們的坦克工廠,假設咱們光造坦克,就叫它PanzerFactory吧
public class PanzerFactory { public static Panzer createPanzer(String panzerName){ Panzer panzer=null; switch (panzerName) { case "灰熊坦克": panzer=new BearPanzer(); break; case "光棱坦克": panzer=new EdgelightPanzer(); break; default: break; } return panzer; } }
哈哈,終於搞定,先開一盤游戲試試
public class RedAlert { public static void main(String[] args) { System.out.println("開局......"); PanzerFactory factory=new PanzerFactory(); System.out.println("開始造坦克"); Panzer panzer1=factory.createPanzer("灰熊坦克"); Panzer panzer2=factory.createPanzer("光棱坦克"); panzer1.move(); panzer2.move(); System.out.println("YOU WIN!"); } }
游戲界面(-_-|||):
游戲勝利啦(話說以前玩也沒怎麼贏過,如今代碼在手,天下我有23333).
思考時間:
為什麼要用工廠模式?有什麼好處?
首先工廠模式使用了多態,創建的類都是Panzer的子類,當然,介面也是同樣的道理,一樣適用,這樣可以通過父類的引用直線子類。
工廠模式封裝了對類的創建,這樣可以減少我們創建類對象時的錯誤,還可以在類創建時進行一些其他的控制比如列印log等。