我正在开发一个带有特定API的bespoken框架,现在我正在努力重新分解它。
我必须解决的一个问题是创建一种类似于根据查询深度和其他属性将查询重定向到不同类的方法。 以下是方法:
class Blah {
public Object query1(){...}
public Object query2(){...}
}
我必须将其更改为
class Blah implements BeforeFilter{
@Override
protected void filter()
{
//decide to call which query method
//then redirect the request to query
}
public Object query1(){...}
public Object query2(){...}
}
一种非常传统的做法是在每个query()方法中添加if / else以决定是否进一步。
说实话,我不喜欢这种做法。这就是为什么我在寻找更优雅的东西。
P.S:这样做的原因不是改变公共API。我已经实现了代理设计模式,但是会改变一些API。
答案 0 :(得分:2)
这听起来像Chain-of-Responsibility,它正是一种“类似路径”的方法,过滤器或链元素符合一个通用接口,你可以用不同的方式组装它们,类似于链表。查询/请求被传递给第一个链元素,然后它将请求传递给它的“下一个”链元素,依此类推。每个Chain元素或过滤器决定是否对请求/ SQL等执行某些操作。
通过这种方式,您可以使用过滤机制,其中每个过滤器(或链元素)与其他过滤器(或链元素)分离,并且不需要if-then-else梯形图。