第23章:策略模式-算法的封装与切换
定义:
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化。
将算法的定义与使用分开
结构:
代码实现:
//抽象策略类
abstract class AbstractStrategy {
public abstract void algorithm(); //声明抽象算法
}
//具体策略类
class ConcreteStrategyA extends AbstractStrategy {
//算法的具体实现
public void algorithm() {
//算法A
}
}
//环境类
class Context {
private AbstractStrategy strategy; //维持一个对抽象策略类的引用
public void setStrategy(AbstractStrategy strategy) {
this.strategy = strategy;
}
//调用策略类中的算法
public void algorithm() {
strategy.algorithm();
}
}
class Client {
public static void main(String[] args) {
Context context = new Context();
AbstractStrategy strategy;
strategy = new ConcreteStrategyA(); //可在运行时指定类型
context.setStrategy(strategy);
context.algorithm();
}
}
应用实例:
影院售票系统针对不同类型的用户提供不同的打折方式
- 学生8折
- 10岁以下减免10元(票价>=20)
- VIP半价优惠,积分累计
//电影票类
class MovieTicket {
private double price; //电影票价格
private String type; //电影票类型
public void setPrice(double price) {
this.price = price;
}
public void setType