策略模式框架应用
使用这个模式来将一组算法封装成一系列对象。通过传递这些对象可以灵活的改变程序的功能
- java.util.Comparator#compare (抽象策略接口)
java.util.Collections.sort(List<T>, Comparator<? super T>)
- javax.servlet.http.HttpServletRequest#getMethod(抽象策略接口)
javax.servlet.http.HttpServlet.service(HttpServletRequest, HttpServletResponse)
- javax.servlet.Filter#doFilter(抽象策略接口)
自定义过滤器
介绍
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
实现
- 我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类
- StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化
源码
- Strategy 接口
public interface Strategy {
public int doOperation(int num1, int num2);
}
- 具体的实现类
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
public class OperationSubstract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
public class OperationMultiply implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
- 创建 Context 类
public class Context {
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
- 测试类
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context(new OperationAdd());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationSubstract());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context = new Context(new OperationMultiply());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
参考文档:
[1]. http://www.runoob.com/design-pattern/strategy-pattern.html