策略模式原理图
(主要的中心思想是面向接口编程,右侧接口作为英雄类的属性存在)
Demo代码实现
package celuomoshi;
public interface Iskill {
// 召唤师技能接口展示技能
public abstract void showSkill();
}
package celuomoshi;
public class JiPao implements Iskill{
// 召唤师技能接口展示技能
public void showSkill() {
System.out.println("这是召唤师的疾跑技能");
}
}
package celuomoshi;
public class KuangBao implements Iskill{
// 召唤师技能接口展示技能
public void showSkill() {
System.out.println("这是召唤师的狂暴技能");
}
}
package celuomoshi;
public abstract class Hero {
//英雄名称
private String heroName;
// 英雄召唤师技能接口(组合关系)
private Iskill iskill;
// 自我介绍方法
public abstract void introduceSelf();
// 普攻的方法
public abstract void normalAttract();
// 召唤师技能的使用方法
public void skill(){
iskill.showSkill();
}
// get/set 方法
public String getHeroName() {
return heroName;
}
public void setHeroName(String heroName) {
this.heroName = heroName;
}
public Iskill getIskill() {
return iskill;
}
public void setIskill(Iskill iskill) {
this.iskill = iskill;
}
}
package celuomoshi;
public class HouYi extends Hero {
// 构造方法 设置英雄名称
public HouYi() {
super.setHeroName("后羿");
}
@Override
public void introduceSelf() {
System.out.println("觉醒吧,猎杀时刻");
}
public void normalAttract() {
System.out.println("嗖!嗖!嗖!");
}
}
package celuomoshi;
public class HeroTest {
public static void main(String[] args) {
// 选择英雄
Hero hero = new HouYi();
// 英雄自我介绍
System.out.print("英雄: "+hero.getHeroName());
System.out.println();
System.out.print("自我介绍: ");
hero.introduceSelf();
System.out.println();
// 设置召唤师技能
hero.setIskill(new JiPao());
// 游戏开始
System.out.println("游戏开始");
// 英雄使用普通攻击
hero.normalAttract();
// 英雄使用技能攻击
hero.skill();
}
}