use*_*028 5 java oop spring design-patterns
我必须设计像过滤器这样的实体,由Filter
接口表示,声明apply(Content content)
可以应用于内容对象的方法。过滤器可以以链的形式组合在一起,类似于工作流程,但它们是动态的。例如,如果FilterA返回X,那么我将应用filterB,而接收结果Y将导致应用FilterC。过滤器链是特定于应用程序的,我还没有决定如何允许构建过滤器链。
我会以与某些工作流框架相同的方式设计此行为:管理器组件迭代过滤器列表,并调用filter.apply(content)
每个过滤器。但如何允许像 if/else 语句这样的动态性呢?
现在我构思了一个 Workflow 或 FilterChain 接口,声明了一个getNextFilter(previousResult)
. 实现此接口可以声明特定于应用程序的工作流程。但是 Workflow 接口的实现会很无聊:跟踪当前步骤(整数?),然后在每次getNextFilter()
调用时,通过 switch/case 语句确定下一个过滤器?!?
哪种解决方案可能更好?如何声明链?
我使用的是Java和Spring,所以可以使用IoC。
由于您只想按顺序执行过滤器链,因此将过滤器链实现为List<Filter>
. 您可以对它们进行循环并执行。类似的东西(请注意,这显然是我没有尝试过的快速实现):
public class FilterChainImpl implements FilterChain {
private List<Filter> filterChain = new ArrayList<Filter>();
public addFilter(final Filter f) {
filterChain.add(f);
}
public apply(final Content content) {
Content prevContent = content;
for(Filter f : filterChain) {
prevContent = f.apply(prevContent);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用它来创建您喜欢的任何过滤器链。如果您将拥有许多不同的过滤器链,您可以使用一些工厂技术来创建过滤器链。
归档时间: |
|
查看次数: |
10057 次 |
最近记录: |