简单工厂模式,就是有一个工厂类,负责生成所需要的实体类。
这让我想起了红警,在红警里,如果需要造一辆坦克,需要先有一个战车工厂,在坦克工厂里选择坦克类型,然后坦克工厂才会生成所需要的坦克。
不多说直接上代码。
首先有个坦克类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等。