策略模式 – 迪迦
首先定义策略的抽象 – 战斗形态
public interface CombatForm {
void fight();
}
综合战斗形态
public class IntegratedCombatForm implements CombatForm {
private IntegratedCombatForm() {
}
private static final IntegratedCombatForm INSTANCE = new IntegratedCombatForm();
@Override
public void fight() {
System.out.println("哉佩利敖光线: ===============");
}
public static IntegratedCombatForm getInstance() {
return INSTANCE;
}
}
强力战斗形态
public class PowerfulCombatForm implements CombatForm {
private PowerfulCombatForm() {
}
private static final PowerfulCombatForm INSTANCE = new PowerfulCombatForm();
@Override
public void fight() {
System.out.println("迪拉休姆光流: ==============>>");
}
public static PowerfulCombatForm getInstance() {
return INSTANCE;
}
}
敏捷战斗形态
public class AgileCombatForm implements CombatForm {
private AgileCombatForm() {}
private static final AgileCombatForm INSTANCE = new AgileCombatForm();
@Override
public void fight() {
System.out.println("兰帕尔特光弹: ----------->>");
}
public static AgileCombatForm getInstance() {
return INSTANCE;
}
}
迪迦本尊
public class Tiga {
private CombatForm combatForm;
public Tiga(CombatForm combatForm) {
this.combatForm = combatForm;
}
/**
* 切换形态
*/
public void changeForm(CombatForm combatForm) {
this.combatForm = combatForm;
}
public void fight() {
this.combatForm.fight();
}
}
测试类
public class Test {
public static void main(String[] args) {
Tiga tiga = new Tiga(IntegratedCombatForm.getInstance());
tiga.fight();
tiga.changeForm(PowerfulCombatForm.getInstance());
tiga.fight();
tiga.changeForm(AgileCombatForm.getInstance());
tiga.fight();
}
}
运行效果
哉佩利敖光线: ===============
迪拉休姆光流: ==============>>
兰帕尔特光弹: ----------->>