首页 > 数据库 > 数据库开发技术 > 策略模式玩转步兵,骑士和弓箭手







/*** 战斗接口* @author zhanyd*/public interface FightBeHavior {/*** 战斗*/void fight();}
/*** 剑战斗子类* @author zhanyd*/public class FightWithSword implements FightBeHavior{public void fight() {System.out.println("攻击:看我的剑法");}}
/*** 弓箭战斗子类* @author zhanyd*/public class FightWithArrow implements FightBeHavior{public void fight() {System.out.println("攻击:我射箭-->");}}
/*** 长枪战斗子类* @author zhanyd*/public class FightWithSpear implements FightBeHavior{public void fight() {System.out.println("攻击:看我的长枪");}}
/*** 石头战斗子类* @author zhanyd*/public class FightWithStone implements FightBeHavior{public void fight() {System.out.println("攻击:我扔石头");}}
/*** 自愈接口* @author zhanyd*/public interface SelfHealingBeHavior {/*** 自愈*/void selfHealing();}
/*** 快速回血子类* @author zhanyd*/public class SelfHealingFast implements SelfHealingBeHavior{public void selfHealing() {System.out.println("我每秒回血3%\n");}}
/*** 中速回血子类* @author zhanyd*/public class SelfHealingNormal implements SelfHealingBeHavior{public void selfHealing() {System.out.println("我每秒回血2%\n");}}
/*** 慢速回血子类* @author zhanyd*/public class SelfHealingSlow implements SelfHealingBeHavior{public void selfHealing() {System.out.println("我每秒回血1%\n");}}
/*** 兵种父类* @author zhanyd*/public class Unit {protected String name;protected FightBeHavior fightBeHavior;protected SelfHealingBeHavior selfHealingBeHavior;public void move() {System.out.println("我是:" + name);System.out.println("向前挺进...");}public void stop() {System.out.println("原地待命...");}/*** 动态设置战斗方式* @param fi*/public void setFightBeHavior(FightBeHavior fi) {fightBeHavior = fi;}/*** 动态设置自愈速度* @param se*/public void setSelfHealingBeHavior(SelfHealingBeHavior se) {selfHealingBeHavior = se;}/*** 战斗*/public void fight() {fightBeHavior.fight();}/*** 自愈*/public void selfHealing() {selfHealingBeHavior.selfHealing();}}
/*** 步兵* @author Administrator*/public class Infantry extends Unit{public Infantry() {name = "步兵";// 用剑攻击fightBeHavior = new FightWithSword();// 回血速度慢selfHealingBeHavior = new SelfHealingSlow();}}
/*** 弓箭手* @author zhanyd*/public class Archer extends Unit{public Archer() {name = "弓箭手";// 用弓箭攻击fightBeHavior = new FightWithArrow();// 回血速度一般selfHealingBeHavior = new SelfHealingNormal();}}
/*** 骑士* @author zhanyd*/public class Knight extends Unit{public Knight() {name = "骑士";// 用长枪攻击fightBeHavior = new FightWithSpear();// 回血速度快selfHealingBeHavior = new SelfHealingFast();}}
/*** 投石车* @author zhanyd*/public class Catapult extends Unit{public Catapult() {name = "投石车";// 用石头攻击fightBeHavior = new FightWithStone();// 不能回血,不用设置回血功能}}
public class TestUnit {public static void main(String[] args) {// 步兵出击Unit unit = new Infantry();unit.move();unit.fight();unit.stop();unit.selfHealing();// 弓箭手出击unit = new Archer();unit.move();unit.fight();unit.stop();unit.selfHealing();// 骑士出击unit = new Knight();unit.move();unit.fight();// 骑士扔掉了长枪,拔出了宝剑System.out.println("动态设置:骑士扔掉了长枪,拔出了宝剑!");unit.setFightBeHavior(new FightWithSword());unit.fight();unit.stop();unit.selfHealing();// 投石车出击unit = new Catapult();unit.move();unit.fight();unit.stop();// 修理工给投石车做了保养,投石车也能回血了System.out.println("动态设置:修理工给投石车做了保养,投石车也能回血了");unit.setSelfHealingBeHavior(new SelfHealingSlow());unit.selfHealing();}}
我是:步兵向前挺进...攻击:看我的剑法原地待命...我每秒回血1%我是:弓箭手向前挺进...攻击:我射箭-->原地待命...我每秒回血2%我是:骑士向前挺进...攻击:看我的长枪动态设置:骑士扔掉了长枪,拔出了宝剑!攻击:看我的剑法原地待命...我每秒回血3%我是:投石车向前挺进...攻击:我扔石头原地待命...动态设置:修理工给投石车做了保养,投石车也能回血了我每秒回血1%

原文作者:编程我也会;如有侵权,请联系管理员删除。