设计模式(二) 策略模式Strategy

  策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,我个人的理解是,具有相同行为不同的行为模式,比如走路,有人速度3m/s,有人100m/s,把他们的具体行走和对象本身走路的行为分开,这样即使行走的算法变了,只要改改算法类,对象类就不用改了。

  我们还是玩红警,现在已经造好了我们的战车工厂PanzerFactory,有两个坦克灰熊坦克BearPanzer和光棱坦克EdgelightPanzer在工厂里等待临幸。

  这两个坦克都是可以移动的,现在假设我们的坦克可以攻击和防守(我记得好像兵才有这个功能,算啦,懒得再写类了),先在我们给他们点上攻击和防守的技能点。

  把攻击抽象出一个接口

public interface PanzerStrategy {
public void doAction();
}

  让我们的坦克具有这两种行为

public class Panzer {
protected String name;
//加入一个策略类对象
protected PanzerStrategy panzerStrategy; public void move(){
System.out.println(name+"移动了!");
}
//具体行为方法
protected void doAction(){
System.out.print(name);
panzerStrategy.doAction();
}
} public class BearPanzer extends Panzer{ public BearPanzer(PanzerStrategy panzerStrategy){
this.panzerStrategy=panzerStrategy;
name="灰熊坦克";
System.out.println(name+"制造完成");
} } public class EdgelightPanzer extends Panzer {
public EdgelightPanzer(PanzerStrategy panzerStrategy){
this.panzerStrategy=panzerStrategy;
name="光棱坦克";
System.out.println(name+"制造完成");
}
}

  还有战车工厂,目前的游戏模式,一个坦克出来的时候他有个默认的使命,攻击或者防守

public class PanzerFactory {

    public PanzerFactory() {
System.out.println("战车工厂造好了");
} public Panzer createPanzer(String panzerName,PanzerStrategy panzerStrategy){
Panzer panzer=null;
switch (panzerName) {
case "灰熊坦克":
panzer=new BearPanzer(panzerStrategy);
break;
case "光棱坦克":
panzer=new EdgelightPanzer(panzerStrategy);
break;
default:
break;
}
return panzer;
}
}

  现在又可以开一盘啦,这次我们造10个坦克,让灰熊守家,光棱去纵横驰骋

  

public class RedAlert {
public static void main(String[] args) {
System.out.println("开局......"); PanzerFactory factory=new PanzerFactory();
System.out.println("开始造坦克");
Panzer[] panzer=new Panzer[10];
//这个就是我们的两种指令
PanzerStrategy attackStratege=new AttackStratege();
PanzerStrategy defenseStratege=new DefenseStratege();
for (int i = 0; i <5; i++) {
panzer[i]=factory.createPanzer("灰熊坦克",defenseStratege);
}
for (int i = 5; i <10; i++) {
panzer[i]=factory.createPanzer("光棱坦克",attackStratege);
}
for (Panzer p : panzer) {
p.doAction();
}
System.out.println("YOU WIN!");
}
}

  设计模式(二) 策略模式Strategy

  思考时间:策略模式是怎么个思路,有什么好处?

  策略模式是把某一行为具体的算法封装到一系列类中,具有这一行为的对象类具有这些算法类,行为类调用行为函数时,只需要调用内部拥有的算法类的方法即可。

  好处是如果需要修改或者增加,只要增加或者修改对应的算法类就可以,不必修改行为类,耦合度大大降低。

  

  

上一篇:关于java字符串编译优化问题


下一篇:java对象在hibernate持久层的状态