24.12.17
实验 23:策略模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解策略模式的动机,掌握该模式的结构;
2、能够利用策略模式解决实际问题。
[实验任务一]:旅行方式的选择
旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可以根据自己的需要选择一种合适的旅行方式。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
3. 注意编程规范。
- 类图
- 源代码
// 抽象策略:旅游方式
interface TravelStrategy {
void travel();
}
// 具体策略:乘飞机旅行
class AirTravel implements TravelStrategy {
@Override
public void travel() {
System.out.println("乘坐飞机旅行:快速到达目的地!");
}
}
// 具体策略:乘火车旅行
class TrainTravel implements TravelStrategy {
@Override
public void travel() {
System.out.println("乘坐火车旅行:沿途欣赏风景!");
}
}
// 具体策略:骑自行车旅行
class BikeTravel implements TravelStrategy {
@Override
public void travel() {
System.out.println("骑自行车旅行:享受健康和自由!");
}
}
// 上下文类:旅行上下文
class TravelContext {
private TravelStrategy strategy; // 持有当前选择的策略
public void setStrategy(TravelStrategy strategy) {
this.strategy = strategy; // 动态切换策略
}
public void executeStrategy() {
if (strategy != null) {
strategy.travel(); // 执行当前策略
} else {
System.out.println("请先选择一种旅行方式!");
}
}
}
// 测试类
public class Client {
public static void main(String[] args) {
TravelContext context = new TravelContext();
// 选择乘飞机旅行
System.out.println("客户选择:飞机旅行");
context.setStrategy(new AirTravel());
context.executeStrategy();
// 选择乘火车旅行
System.out.println("\n客户选择:火车旅行");
context.setStrategy(new TrainTravel());
context.executeStrategy();
// 选择骑自行车旅行
System.out.println("\n客户选择:自行车旅行");
context.setStrategy(new BikeTravel());
context.executeStrategy();
// 未选择旅行方式
System.out.println("\n客户未选择旅行方式");
context.setStrategy(null);
context.executeStrategy();
}
}