- 实验题目
1.策略模式的运用
2.装饰者模式的运用
- 实验目的
1.策略模式的运用:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在熟悉策略模式相关理论知识的基础上,使用策略模式实现一个小游戏。
2.装饰者模式的运用:装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。在熟悉装饰者模式相关理论知识的基础上,使用装设者模式实现米线店结账小程序。
- 实验内容
策略模式的运用:
要求如下:
- 游戏中有三个角色:和尚,侠女,忍者;
- 每个角色都有生命值和魔法值,但各角色不同。
- 各角色外观不同。
- 每个角色具有魔法攻击和物理攻击;
- 物理攻击有三种:用刀、用剑、用手;
- 魔法攻击也有三种:火系魔法、金系魔法、水系魔法;
- 各角色可以动态更换物理、魔法攻击方式,也可以动态选择攻击方法。
装饰者模式的运用:
要求如下:
- 米线有三种,干浆、酸浆和水米线。
- 配料有三种,豆腐、鸡蛋、牛肉,今后还会更多。
- 客户可疑随心所欲的要各种米线搭配各种配料,配料可以加同一种加多份,或者不同种加多份。
- 实验实现
策略模式类图:
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("每个角色外观不一样!");
}
}
- 创建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("我是和尚"); } }
- 创建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("我是魔女"); } - 创建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("我是和尚"); } }
- 创建MofaGong接口
package edu.ccut.Dao; public interface MofaGong { public void mofa(); } - 创建MofaHuo类实现MofaGon
package edu.ccut.Dao; public class MofaHuo implements MofaGong{ public void mofa() { System.out.println("正在使用火系魔法攻击对方"); } } - 创建MofaJin类实现MofaGong
package edu.ccut.Dao; public class MofaJin implements MofaGong{ public void mofa() { System.out.println("正在使用金系魔法攻击对方"); } } - 创建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();
}
}