设计模式之策略模式实验报告

《设计模式》实验指导书

实验目的

  • 理解策略模式基本概念
  • 掌握策略模式的使用

实验工具

  • 计算机,安装JDK
  • vscode或eclipse

实验题目

  • 基于策略模式,设计一个简易的文字版动作冒险类游戏。

实验步骤

  1. 设计一个动作冒险类游戏,其中有游戏角色类和角色可以使用武器的类,其中角色在游戏中一次只能使用一种武器,但是可以在游戏中切换武器。
  2. 武器接口WeaponBehavior
    • 抽象方法useWeapon()
    • 四个子类:SwordBehavior, KnifeBehavior, BowAndArrowBehavior, AxeBehavior
  3. 角色抽象类Character:
    • 具体角色包括King,Queen,Knight,Troll
    • 每个角色有不同的fight()方法,fight方法中首先介绍自己是谁(如输出“I’m a King!”),并调用目前武器的useWeapon()方法
    • 角色可通过setWeapon()方法设置武器,且应在构造时通过此法初始化武器
  4. 程序的主函数可参考下述代码:
        public static void main(String[] args) {
             Character character = new King();
             character.fight();
             character = new Queen();
             character.fight();
             character = new Knight();
             character.fight();
             character = new Troll();
             character.fight();
             character.setWeapon(new AxeBehavior());
             character.fight();
         }
    

实验内容

  • 关键类的源程序清单:
// Test.java
public class Test {
  	public static void main(String[] args) {
     	 Character character = new King();
		 character.display();
	     character.fight();
	     character = new Queen();
	     character.display();
	     character.fight();
	     character = new Knight();
	     character.display();
	     character.fight();
	     character = new Troll();
	     character.display();
	     character.fight();
	     character.setWeapon(new AxeBehavior());
	     character.display();
	     character.fight();
  	}
}
// WeaponBehavior.java(变换武器)
public interface WeaponBehavior {
	public void useWeapon(); 
}
// Character.java(切换人物)
public interface Character {
	WeaponBehavior weaponBehavior;
	public Character() {};
	public abstract void display();
	public void fight()
	{
		weaponBehavior.useWeapon();
	}
	public void setWeapon(WeaponBehavior wb)
	{
		this.weaponBehavior=wb;
	}
}
//武器类
// AxeBehavior.java
public class AxeBehavior implements WeaponBehavior{
	@Override
	public void useWeapon() {
		// TODO 自动生成的方法存根
		System.out.println("我使用斧头");
	}
}

// BowAndArrowBehavior.java
public class BowAndArrowBehavior implements WeaponBehavior{
	@Override
	public void useWeapon() {
		// TODO 自动生成的方法存根
		System.out.println("我使用弓箭");
	}
}

// KnifeBehavior.java
public class KnifeBehavior implements WeaponBehavior{
	@Override
	public void useWeapon() {
		// TODO 自动生成的方法存根
		System.out.println("我使用宝剑");
	}
}

// SwordBehavior.java
public class SwordBehavior implements WeaponBehavior{
	@Override
	public void useWeapon() {
		// TODO 自动生成的方法存根
		System.out.println("我使用匕首");
	}
}

//Character的子类
// King.java
public class King extends Character {
		public King(){
		weaponBehavior=new AxeBehavior();
      }	
      @Override
      public void display() {
		// TODO 自动生成的方法存根
		System.out.println("我是国王");
	}
}

// Queen.java
public class Queen extends Character {
		public Queen(){
		weaponBehavior=new KnifeBehavior();
      }	
      @Override
      public void display() {
		// TODO 自动生成的方法存根
		System.out.println("我是皇后");
	}
}

// Knight.java
public class Knight extends Character {
		public Knight(){
		weaponBehavior=new SwordBehavior();
      }	
      @Override
      public void display() {
		// TODO 自动生成的方法存根
		System.out.println("我是骑士");
	}
}

// Troll.java
public class Troll extends Character {
		public Troll(){
		weaponBehavior=new BowAndArrowBehavior();
      }	
      @Override
      public void display() {
		// TODO 自动生成的方法存根
		System.out.println("我是骑士");
	}
}
  • 相关类的类图:
Character WeaponBehavior weaponBehavior String beakColor display() fight() setWeapon() King display() Queen display() Troll display() Knight display() «interface» WeaponBehavior useWeapon() AxeBehavior useWeapon() BowAndArrowBehavior useWeapon() KnifeBehavior useWeapon() SwordBehavior useWeapon()
  • 测试结果:
我是国王
我使用斧头
我是皇后
我使用宝剑
我是骑士
我使用匕首
我是妖怪
我使用弓箭
我是妖怪
我使用斧头

实验总结

  • 通过这次的课程了解了策略模式的是如何编写的和类图是如何制作的。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值