以dota合成装备演示策略模式。
package strategy;
public interface EquipmentStrategy {
void produce();
}
package strategy;
public class BattleFuryStrategy implements EquipmentStrategy{
@Override
public void produce() {
System.out.println("治疗指环");
System.out.println("虚无宝石");
System.out.println("恶魔刀锋");
System.out.println("狂战斧卷轴");
System.out.println("合成狂战斧");
}
}
package strategy;
public class BurizaStrategy implements EquipmentStrategy{
@Override
public void produce() {
System.out.println("阔剑");
System.out.println("攻击之爪");
System.out.println("水晶剑卷轴");
System.out.println("恶魔刀锋");
System.out.println("代达罗斯之殇卷轴");
System.out.println("合成大炮");
}
}
package strategy;
public class Player {
EquipmentStrategy equipmentStrategy;
public Player(EquipmentStrategy equipmentStrategy) {
super();
this.equipmentStrategy = equipmentStrategy;
}
public void produceEquipment() {
equipmentStrategy.produce();
}
public EquipmentStrategy getEquipmentStrategy() {
return equipmentStrategy;
}
public void setEquipmentStrategy(EquipmentStrategy equipmentStrategy) {
this.equipmentStrategy = equipmentStrategy;
}
}
package strategy;
public class StrategyTest {
public static void main(String[] args) {
EquipmentStrategy burizaStrategy=new BurizaStrategy();
Player player=new Player(burizaStrategy);
player.produceEquipment();
EquipmentStrategy battleFuryStrategy=new BattleFuryStrategy();
player.setEquipmentStrategy(battleFuryStrategy);
player.produceEquipment();
}
}
打印结果:
阔剑
攻击之爪
水晶剑卷轴
恶魔刀锋
代达罗斯之殇卷轴
合成大炮
治疗指环
虚无宝石
恶魔刀锋
狂战斧卷轴
合成狂战斧
小结:
1.策略模式比较简单,仅仅只是一个抽象和聚合的应用,一般策略的实现类会很多;
2.策略模式将算法都进行抽象化,不会把很多不同种类的算法堆砌在一起,缺点是策略会直接暴露给Client,需要结合其他模式去使用,比如简单工厂;
3.策略模式和模板模式不同:模板是把骨架都制定好,由子类去实现不同算法,策略模式没有骨架这一概念。
4.策略模式与创建型模式的区别:策略模式不需要返回对象,而且策略的使用比较灵活,可以自由组合,创建型模式一个工厂或者一个建造者只能返回固定对象。