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