• 实验题目

1.策略模式的运用

2.装饰者模式的运用

  • 实验目的

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

2.装饰者模式的运用:装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。

  • 实验内容

策略模式的运用:

要求如下:

  1. 游戏中有三个角色:和尚,侠女,忍者;
  2. 每个角色都有生命值和魔法值,但各角色不同。
  3. 各角色外观不同。
  4. 每个角色具有魔法攻击和物理攻击;
  5. 物理攻击有三种:用刀、用剑、用手;
  6. 魔法攻击也有三种:火系魔法、金系魔法、水系魔法;
  7. 各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。

装饰者模式的运用:

要求如下:

  1. 米线有三种,干浆、酸浆和水米线。
  2. 配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。
  3. 客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。
  • 实验实现

策略模式类图:

1软件设计模式与体系结构策略模式装饰者模式实验报告

Table of Contents

 


.1创建一个名为Role的抽象类


 package fire;

public abstract class Role {
	WuliGong wuliGong;
	MofaGong mofaGong;
	
	public Role() {
		
	}
	
	public void setWuliGong(WuliGong wg) {
		wuliGong = wg;
	}
	public void setMofaGong(MofaGong mg) {
		mofaGong = mg;
	}
	
	public abstract void display();
	
	public void performWuli() {
		wuliGong.wuli();
	}
	public void performMofa() {
		mofaGong.mofa();
	}
	
	public void waiguan() {
		System.out.println("每个角色外观不一样!");
	}

}
  1. 创建RoleHe类继承了Role类
     package edu.ccut.Dao;
    
    public class RoleHe extends Role{
    	public RoleHe() {
    		wuliGong = new WuliDao();
    		mofaGong = new MofaJin();
    	}
    	public void display() {
    		System.out.println("我是和尚");
    	}
    }

     

  1. 创建RoleMo类继承了Role类
    package edu.ccut.Dao;
    
    public class RoleMo extends Role{
    	public RoleMo() {
    		wuliGong = new WuliShou();
    		mofaGong = new MofaHuo();
    	}
    	public void display() {
    		System.out.println("我是魔女");
    	}

     

  2. 创建RoleRen类继承了Role类
    package edu.ccut.Dao;
    
    public class RoleRen extends Role{
    	public RoleRen() {
    		wuliGong = new WuliJian();
    		mofaGong = new MofaShui();
    	}
    	public void display() {
    		System.out.println("我是和尚");
    	}
    }

     

  1. 创建MofaGong接口
     package edu.ccut.Dao;
    
    public interface MofaGong {
    	public void mofa();
    
    }

     

  2. 创建MofaHuo类实现MofaGon
     package edu.ccut.Dao;
    
    public class MofaHuo implements MofaGong{
    	public void mofa() {
    		System.out.println("正在使用火系魔法攻击对方");
    	}
    
    }

     

  3. 创建MofaJin类实现MofaGong
     package edu.ccut.Dao;
    
    public class MofaJin implements MofaGong{
    	public void mofa() {
    		System.out.println("正在使用金系魔法攻击对方");
    	}
    
    }

     

  4. 创建MofaShui类ofaGong
    package edu.ccut.Dao;
    
    public class MofaShui implements MofaGong{
    	public void mofa() {
    		System.out.println("正在使用水系魔法攻击对方");
    	}
    
    }
9.创建WuliGong接口
 package edu.ccut.Dao;

public interface WuliGong {
	public void wuli();

}
10.创建WuliDao类实现WuliGong
 package edu.ccut.Dao;

public class WuliDao implements WuliGong {
	public void wuli() {
		System.out.println("正在使用刀攻击对方");
	}

}
11.创建WuliJian类实现WuliGong
 package edu.ccut.Dao;

public class WuliJian implements WuliGong {
	public void wuli() {
		System.out.println("正在使用剑攻击对方");
	}

}
12.创建WuliShou类实现WuliGong
 package edu.ccut.Dao;

public class WuliShou implements WuliGong {
	public void wuli() {
		System.out.println("正在使用手攻击对方");
	}

}
13.创建Test测试类
 package edu.ccut.Dao;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Role he = new RoleHe();
		he.display();
		he.performMofa();
		he.performWuli();
		
		Role mo = new RoleMo();
		mo.display();
		mo.performMofa();
		mo.performWuli();
		
		Role ren = new RoleRen();
		ren.display();
		ren.performMofa();
		ren.performWuli();

	}

}

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-17
  • 2021-04-30
  • 2021-04-16
  • 2021-04-14
猜你喜欢
  • 2021-08-03
  • 2021-04-20
  • 2022-02-10
  • 2021-08-26
  • 2021-08-28
  • 2021-05-16
  • 2021-04-22
相关资源
相似解决方案