策略模式
-
对应解决某个问题的一个算法族,允许用户从算法族中任意选一个算法解决某一问题,方便更改和添加新的算法。
-
本质:分离算法,选择实现
-
开发中常见的场景:
- JavaSe 中 GUI 编程,布局管理
- Spring 框架中, Resource 接口,资源访问策略
- javax.servlet.http.HttpServlet#service()
实际应用:
在字段校验的时候,使用了这种设计模式,将字段校验的校验规则封装成各种校验策略,在字段进行校验时进行选择。
代码示例:
定义算法接口类:
public interface Strategy {
public boolean volidate(Object obj);
}
算法A:
public class NotNullStrategy implements Strategy {
@Override
public boolean validate(Object obj) {
return obj == null;
}
}
算法B:
public class NotDateStrategy implements Strategy {
@Override
public boolean volidate(Object obj) {
return obj instanceof Date;
}
}
定义一个 Context 对象,保存对 strategy 的应用
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void printPrice(Object obj) {
System.out.println("校验结果" + this.strategy.volidate(obj));
}
}
客户端调用:
public class Client {
public static void main(String[] args) {
Strategy s1 = new NotNullStrategy();
Context c = new Context(s1);
c.volidate(10);
}
}
这里在客户端中,客户端需要知道两个类,Strategy 和 Context,这里可以将具体的策略选择逻辑交给 Context 处理,这样 客户端只需要和 Context 类进行交互就可以了。
本文深入探讨了策略模式的设计理念,即分离算法与实现,允许用户在算法族中灵活选择。通过具体代码示例,展示了如何在字段校验等场景中应用策略模式,提高代码的可维护性和扩展性。
1131

被折叠的 条评论
为什么被折叠?



