以和平精英的特种作战模式为例,无论是工程兵还是医疗兵,都有射击这个行为,此外这些兵种都有一项特殊技能,但不知道具体行为,比如建盾牌、治疗等,可以选择在特殊技能上应用策略模式,之后如需修改具体技能只需修改具体应用的策略,而不必修改兵种这一对象。
package com.depthmind.designpattern;
public class StrategyPattern {
public static void main(String[] args) {
Player player = new EngineeringCorps(new EngineeringCorpsSkill());
player.display();
player.shoot();
player.work();
//change skill
player.setSkill(new MedicalCorpsSkill());
player.work();
}
}
abstract class Player {
Skill skill;
void work() {
skill.work();
}
abstract void shoot();
abstract void display();
abstract public void setSkill(Skill skill);
}
interface Skill {
void work();
}
class EngineeringCorps extends Player {
@Override
public void setSkill(Skill skill) {
this.skill = skill;
}
public EngineeringCorps(Skill skill) {
this.skill = skill;
}
@Override
void shoot() {
System.out.println("just shoot!!!!");
}
@Override
void display() {
System.out.println("I'm a Engineering Corp!!!");
}
}
class EngineeringCorpsSkill implements Skill {
@Override
public void work() {
System.out.println("My Skill Is Build!!!");
}
}
class MedicalCorpsSkill implements Skill {
@Override
public void work() {
System.out.println("My Skill Is Treat!!!");
}
}