策略模式的主要角色如下:
- 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
- 环境或上下文(Context)类:是使用算法的角色, 持有一个策略类的引用,最终给客户端调用。
接口Strategy
java
package com.cocoa.strategy;
/**
* 抽象策略类
**/
public interface Strategy {
void algorithm();
}
类StrategyA
java
package com.cocoa.strategy;
public class StrategyA implements Strategy {
@Override
public void algorithm() {
System.out.println("执行策略A");
}
}
类StrategyB
java
package com.cocoa.strategy;
public class StrategyB implements Strategy {
@Override
public void algorithm() {
System.out.println("执行策略B");
}
}
类StrategyFactory/Context(策略工厂)
java
package com.cocoa.strategy;
/**
* 环境类
**/
public class StrategyFactory {
// 维持一个对抽象策略类的引用
private Strategy strategy;
public StrategyFactory(Strategy strategy) {
this.strategy = strategy;
}
// 调用策略类中的算法
public void algorithm(){
strategy.algorithm();
}
}
测试类Main
java
package com.cocoa.strategy;
public class Main {
public static void main(String[] args) {
Strategy strategyA = new StrategyA();
StrategyFactory context = new StrategyFactory(strategyA); //可以在运行时指定类型,通过配置文件 + 反射机制实现
context.algorithm();// 执行相应策略
}
}