策略模式
介绍
策略模式主要目的是将算法的定义和使用分开,将每一个算法封装起来,并让他们可以相互替换
角色
- Context(环境类):使用算法的角色,在解决某个问题时可以使用多种策略。环境类中维持了一个抽象策略类的引用实例
- Strategy(抽象策略类):可以是抽象类或具体类,为所支持的策略算法声明抽象方法
- ConcreteStrategy(具体策略类)
示例代码
//抽象策略类
public abstract class AbstractStrategy {
public abstract void algorithm();
}
//具体策略类
public class ConcreteStrategyA extends AbstractStrategy {
@Override
public void algorithm() {
System.out.println("ConcreteStrategyA Algorithm");
}
}
//具体策略类
public class ConcreteStrategyB extends AbstractStrategy {
@Override
public void algorithm() {
System.out.println("ConcreteStrategyB Algorithm");
}
}
//环境类
public class Context {
private AbstractStrategy abstractStrategy;
public Context(AbstractStrategy abstractStrategy) {
this.abstractStrategy = abstractStrategy;
}
public void setAbstractStrategy(AbstractStrategy abstractStrategy) {
this.abstractStrategy = abstractStrategy;
}
public void algorithm() {
abstractStrategy.algorithm();
}
}
//客户端
public class Client {
public static void main(String[] args) {
AbstractStrategy abstractStrategy = new ConcreteStrategyA();
Context context = new Context(abstractStrategy);
context.algorithm();
context.setAbstractStrategy(new ConcreteStrategyB());
context.algorithm();
}
}