云南大学软件学院设计模式实验策略模式.精讲.doc 下载本文

云南大学软件学院

实 验 报 告

序号: 姓名: 徐鑫桥 学号: 20121120034 专业: 数字媒体技术 日期: 成绩:

实验一 策略模式的运用

一、实验目的:

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。

二、实验要求:

使用策略模式实现一个小游戏,要求如下:

1. 游戏中有三个角色:和尚,侠女,忍者;

2. 每个角色都有生命值和魔法值,但各角色不同。 3. 各角色外观不同。

4. 每个角色具有魔法攻击和物理攻击; 5. 物理攻击有三种:用刀、用剑、用手;

6. 魔法攻击也有三种:火系魔法、金系魔法、水系魔法;

7. 各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。

1、 设计并绘制该程序的类图;

2、 依照设计的类图使用Java语言编写代码,并实现该程序;

3、 除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是:

a) 控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出;

b) 控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出; c) 设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,

运行结果文本输出;

三、实验内容:

类图:

PhyKnife Phy(){} PhySword Phy(){} PhyHand Phy(){}

MagWater Mag(){} MagGold Mag(){} MagFire Mag(){} interface PhyAttack Phy() Role PhyAttack phyA MagAttack magA display(); perforPhy() performMag() Appearance() setPhyAttack() setMagAttack() interface MagAttack Mag() Buddhist display(){ }

Magicer display(){ } Ninjia display(){ } 相关代码:

Role类及其继承类: Role类:

public abstract class Role { PhyAttack phyA; MagAttack magA; public Role(){ }

public abstract void display(); public void performPhy() { phyA.Phy(); }

public void performMag(){ magA.Mag(); }

public void Appearance() {

System.out.println(\每个角色外观不同!\); }

public void LifeMagic(){

System.out.println(\每个角色生命值和魔法值不同\); }

public void setPhyAttack(PhyAttack pa){ phyA = pa;

}

public void setMagAttack(MagAttack ma){ magA = ma; } }

Role继承类: Buddhist类:

public class Buddhist extends Role{ public Buddhist(){ }

public void display(){

System.out.println(\这个角色是和尚\);

System.out.println(\外观:;生命值:100 ;魔法值100\); } }

Ninjia类:

public class Ninjia extends Role{ public Ninjia(){ }

public void display(){

System.out.println(\这个角色是忍者\);

System.out.println(\外观:;生命值:200;魔法值:35\); } }

Magicer类:

public class Magicer extends Role{ public Magicer(){ }

public void display(){

System.out.println(\这个角色是侠女\);

System.out.println(\外观:;生命值:75;魔法值:225\); } } }

MagAttack接口及其相关实现类: 接口:

public interface MagAttack { public void Mag(); }

MagFire类:

public class MagFire implements MagAttack { public void Mag() {

System.out.println(\用火系魔法攻击对方\); } }

MagGold类:

public class MagGold implements MagAttack { public void Mag() {

System.out.println(\用金系魔法攻击对方\); } }

MagWater类:

public class MagGold implements MagAttack { public void Mag() {

System.out.println(\用金系魔法攻击对方\); } }

PhyAttack接口及其相关实现类: Phyattack接口:

public interface PhyAttack { public void Phy(); }

PhyKnife类:

public class PhyKnife implements PhyAttack { public void Phy() {

System.out.println(\用刀攻击对方\); } }

PhySword类:

public class PhySword implements PhyAttack { public void Phy() {

System.out.println(\用剑攻击对方\); } }

PhyHand类:

public class PhyHand implements PhyAttack { public void Phy() {

System.out.println(\用手攻击对方\); } }

Show类:

public class Show {

public static void main(String[] args) {

Role Budd=new Buddhist(); Budd.display();

Budd.setPhyAttack(new PhyHand()); Budd.performPhy();

Budd.setPhyAttack(new PhyKnife()); Budd.performPhy();

Budd.setMagAttack(new MagGold()); Budd.performMag();

Role Magic=new Magicer();