• 周三. 4 月 22nd, 2026

物嫩软件资讯网

软件资讯来物嫩

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

admin@wunen

4 月 2, 2025



《设计模式》实验指导书



实验目的

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



实验工具

  • 计算机,安装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("我是骑士");
	}
}
  • 相关类的类图:

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}

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()

  • 测试结果:
我是国王
我使用斧头
我是皇后
我使用宝剑
我是骑士
我使用匕首
我是妖怪
我使用弓箭
我是妖怪
我使用斧头



实验总结

  • 通过这次的课程了解了策略模式的是如何编写的和类图是如何制作的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注