0

我正在开发一个带有特定 API 的定制框架,现在我正在重构它。

我必须解决的问题之一是创建一种类似路由的方法,以根据查询深度和其他属性将查询重定向到不同的类。以下是方法:

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 来决定是否走得更远。

老实说,我不喜欢这种方法。这就是为什么我在寻找更优雅的东西。

PS:这样做的原因不是为了更改公共 API。我已经实现了代理设计模式,但那会改变一些 API。

4

1 回答 1

2

在我看来,这听起来像责任链,它完全是一种“类似路由”的方法,过滤器或链元素符合一个通用接口,并且您以类似于链表的不同方式组装它们。查询/请求被传递给第一个链元素,然后它将请求传递给它的“下一个”链元素,依此类推。每个 Chain 元素或过滤器决定是否对请求/SQL 等做一些事情。

这样,您就拥有了过滤机制,其中每个过滤器(或链元素)都与其他过滤器分离,并且不需要 if-then-else 阶梯。

于 2012-12-05T15:24:33.460 回答