设计模式实验1-策略模式复习课程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计模式实验1-策略
模式
实验报告
课程:设计模式实验学期: 2010-2011学年第一学期任课教师:
专业:学号:姓名:成绩:
实验1 策略模式
1.题目:
在教材25页上,有一堆杂乱的类与接口,选取自一个动作冒险游戏。我们能看到代表游戏角色的类和角色可以使用的武器行为的类。每个角色一次只能使用一种武器,但是可以在游戏的过程中换武器,使用策略模式完成实验要求。
2.模式设计的UML类图:
3.程序源代码:
(1)角色抽象类Character.java:
public abstract class Character
{
WeaponBehavior weaponBehavior;
public Character(){};
public abstract void display();
public void fight() //委托给行为类
{
eWeapon();
}
public void setWeaponBehavior(WeaponBehavior wb) //设置武器类型
{
weaponBehavior = wb;
}
}
(2)继承角色抽象类的各个子类:
public class King extends Character
{
public King()
{
weaponBehavior = new SwordBehavior(); //初始化武器类型
}
public void display()
{
System.out.print("King: ");
}
}
public class Queen extends Character
{
public Queen()
{
weaponBehavior = new KnifeBehavior(); //初始化武器类型
}
public void display()
{
System.out.print("Queen: ");
}
}
public class Knight extends Character
{
public Knight()
{
weaponBehavior = new BowAndArrowBehavior(); //初始化武器类型
}
public void display()
{
System.out.print("Knight: ");
}
}
public class Troll extends Character
public Troll()
{
weaponBehavior = new AxeBehavior(); //初始化武器
类型
}
public void display()
{
System.out.print("Troll: ");
}
}
(3)武器行为的接口WeaponBehavior.java:
public interface WeaponBehavior
{
public void useWeapon();
}
(4)实现武器行为接口的各个子类:
public class AxeBehavior implements WeaponBehavior
{
public void useWeapon()
{
System.out.println("用斧头砍劈! (AxeBehavior)");
}
}
public class BowAndArrowBehavior implements
WeaponBehavior
{
public void useWeapon()
{
System.out.println("用弓箭射击! (BowAndArrowBehavior)");
}
}
public class KnifeBehavior implements WeaponBehavior
{
public void useWeapon()
{
System.out.println("用匕首刺杀! (KnifeBehavior)"); }
}
public class SwordBehavior implements WeaponBehavior
{
public void useWeapon()
{
System.out.println("用宝剑刺杀! (SwordBehavior)");
}
}
(5)角色打斗的主类CharacterFight.java:
public class CharacterFight
{
public static void main(String[] args)
{
Character king = new King();
Character queen = new Queen();
Character knight = new Knight();
Character troll = new Troll();
king.display();
System.out.print("妖怪过来了,让我");
king.fight();
queen.display();
System.out.print("我手里有匕首,我");
queen.fight();
troll.display();
System.out.print("哈哈,我不怕你们,我");
troll.fight();
knight.display();
System.out.print("国王小心,让我");
knight.fight();
king.display();
System.out.print("你的射击水平太差了,还是让我来吧,我");
king.setWeaponBehavior(new BowAndArrowBehavior()); //更换武器
king.fight();
troll.display();
System.out.print("哈哈,你们完蛋了,我也有弓箭,");
troll.setWeaponBehavior(new BowAndArrowBehavior()); //更换武器
troll.fight();
king.display();
System.out.println("骑士,用你的斧头啊!给我使劲劈死他。");
knight.display();
System.out.print("是,国王,妖怪,拿命来吧!");
knight.setWeaponBehavior(new AxeBehavior()); //更换武器
knight.fight();
troll.display();
System.out.println("啊啊...,你的斧头还厉害啊,我败了。");
}
}