策略模式
例如,在该模式中定义一系列算法,对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
在策略模式中分为一下几个部分:抽象策略类、具体策略类、环境类
1. 抽象策略类
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现
package com.wx.demo01;
//抽象策略类
public interface Strategy {
//策略方法
public void strategyMethod();
}
2. 具体策略类
实现了抽象策略定义的接口,提供具体的算法实现。
package com.wx.demo01;
//具体策略A
public class ConcreteStrategyA implements Strategy {
public void strategyMethod() {
System.out.println("具体策略A的策略方法被访问");
}
}
package com.wx.demo01;
//具体策略类B
public class ConcreteStrategyB implements Strategy {
public void strategyMethod() {
System.out.println("具体策略B的策略方法被访问");
}
}
3. 环境类
持有一个策略类的引用,最终给客户端调用。
package com.wx.demo01;
public class Context {
private Strategy strategy;
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void strategyMethod(){
strategy.strategyMethod();
}
}
4. 测试类
package com.wx.demo01;
public class StrategyPattern {
public static void main(String[] args) {
Context c= new Context();
Strategy s= new ConcreteStrategyA();
c.setStrategy(s);
c.strategyMethod();
System.out.println("-----------------");
s=new ConcreteStrategyB();
c.setStrategy(s);
c.strategyMethod();
}
}
5. 测试结果