收藏 分销(赏)

云南大学软件学院设计模式实验-策略模式.doc

上传人:仙人****88 文档编号:9283831 上传时间:2025-03-19 格式:DOC 页数:6 大小:104KB 下载积分:10 金币
下载 相关 举报
云南大学软件学院设计模式实验-策略模式.doc_第1页
第1页 / 共6页
云南大学软件学院设计模式实验-策略模式.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
云南大学软件学院 实 验 报 告 序号: 姓名: 徐鑫桥 学号: 20121120034 专业: 数字媒体技术 日期: 成绩: 实验一 策略模式的运用 一、实验目的: 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。 二、实验要求: 使用策略模式实现一个小游戏,要求如下: 1. 游戏中有三个角色:和尚,侠女,忍者; 2. 每个角色都有生命值和魔法值,但各角色不同。 3. 各角色外观不同。 4. 每个角色具有魔法攻击和物理攻击; 5. 物理攻击有三种:用刀、用剑、用手; 6. 魔法攻击也有三种:火系魔法、金系魔法、水系魔法; 7. 各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。 1、 设计并绘制该程序的类图; 2、 依照设计的类图使用Java语言编写代码,并实现该程序; 3、 除了核心的模式相关类实现外,提供测试环境,按照难度高低,分别是: a) 控制台程序,Client硬编码初始化模式和测试环境,运行结果文本输出; b) 控制台程序,Client初始化测试环境,并根据用户输入运算,运行结果文本输出; c) 设计并实现用户UI,Client初始化测试环境,并根据用户在UI控件上的输入运算,运行结果文本输出; 三、实验内容: 类图: MagWater Mag(){} MagGold Mag(){} MagFire Mag(){} PhyKnife Phy(){} PhySword Phy(){} PhyHand Phy(){} interface PhyAttack Phy() interface MagAttack Mag() Role PhyAttack phyA MagAttack magA display(); perforPhy() performMag() Appearance() setPhyAttack() setMagAttack() Magicer display(){ } Buddhist 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(); Magic.display(); Magic.setMagAttack(new MagFire()); Magic.performMag(); Magic.setMagAttack(new MagWater()); Magic.performMag(); Magic.setMagAttack(new MagGold()); Magic.performMag(); Magic.setPhyAttack(new PhyHand()); Magic.performPhy(); Role Nin=new Ninjia(); Nin.display(); Nin.setPhyAttack(new PhyKnife()); Nin.performPhy(); Nin.setPhyAttack(new PhySword()); Nin.performPhy(); Nin.setPhyAttack(new PhyHand()); Nin.performPhy(); Nin.setMagAttack(new MagFire()); Nin.performMag(); System.out.println("20121120034 数字媒体技术 徐鑫桥"); } } 3.测试结果: 四、实验总结: 通过本次实验,了解了基本策略模式的结构,意图以及使用效果。策略模式是一种定义一系列算法的方法,所有算法完成相同工作,但是实现不同。 每个算法都有自己的类,可以通过自己的借口单独测试,简化了单元测试。 算法和使用算法的对象相互分离,针对接口编程而非针对实现编程,把可能需要变化的代码独立出来,组合优于继承。客户程序可以在运行时动态选择算法,代码复用性好,便于修改和维护;用组合替代继承,效果更好。消除了冗长的条件语句序列,将不同的算法硬编码进一个类中。 指导教师签名:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服