策略模式主要是用来单个属性多个主体重复使用。典型例子就是游戏的角色。
每个游戏角色都有三种技能,逃跑 攻击 防御
public interface GongJiSkil { String gongji(); }
public interface FangYuSkill { String fangyu(); }
public interface RunSkill { String run(); }
public class JinZhongZhao implements FangYuSkill { @Override public String fangyu() { System.out.println("金钟罩"); return "金钟罩"; } }
public class LingBoWeiBu implements RunSkill { @Override public String run() { System.out.println("凌波微步"); return "凌波微步"; } }
public class LiuMaiShenJian implements GongJiSkil { @Override public String gongji() { System.out.println("六脉神剑"); return "六脉神剑"; } }
public class ShenChuGuimo implements RunSkill { @Override public String run() { System.out.println("神出鬼没"); return "神出鬼没"; } }
public class TieBuShan implements FangYuSkill { @Override public String fangyu() { System.out.println("铁布衫"); return "铁布衫"; } }
public class XiangLongShiBaZhang implements GongJiSkil { @Override public String gongji() { System.out.println("降龙十八掌"); return "降龙十八掌"; } }
public abstract class Role { private GongJiSkil gongJiSkil; private FangYuSkill fangYuSkill; private RunSkill runSkill; public Role setFangYuSkill(FangYuSkill fangYuSkill) { this.fangYuSkill = fangYuSkill; return this; } public Role setGongJiSkil(GongJiSkil gongJiSkil) { this.gongJiSkil = gongJiSkil; return this; } public Role setRunSkill(RunSkill runSkill) { this.runSkill = runSkill; return this; } public String getFangYuSkill() { return fangYuSkill.fangyu(); } public String getGongJiSkil() { return gongJiSkil.gongji(); } public String getRunSkill() { return runSkill.run(); } }
public class SystemRole extends Role{ String name; public String getName() { return name; } public void setName(String name) { this.name = name; } SystemRole(){} SystemRole(String name){ this.name = name; } }
public class Test { public static void main(String[] args) { Role role1 = new SystemRole("乔峰") .setFangYuSkill(new JinZhongZhao()) .setGongJiSkil(new XiangLongShiBaZhang()) .setRunSkill(new LingBoWeiBu()); Role role2 = new SystemRole("虚竹") .setGongJiSkil(new LiuMaiShenJian()) .setRunSkill(new ShenChuGuimo()) .setFangYuSkill(new TieBuShan()); } }