Context
您正在与Filter
实现细节之间创建危险的依赖关系。在如此高的耦合下,您会遇到已经注意到的问题,例如,您需要更改Context
,无论何时添加或更改Filter
.
所有人Context
都应该知道的Filter
是,它有一个公共方法来执行其实现细节。仅此而已!该方法在Filter
接口中定义。
Filter
取决于 aContext
的存在。它也知道如何处理它的参数。
要实现责任链,Context
可以有一组Filter
对象,它可以迭代并调用接口中定义的过滤方法。
在伪代码中它会是这样的:
class Filter {
function Filter(context, params) {
// initializes a filter object with a context and its specific parameters
}
function run() {
// run is the method defined by the Filter interface
// here goes the implementation details for this filter
}
}
class Context {
array filters = [];
function applyFilter(filter) {
filters.push(filter);
}
function run() {
for filter in filters {
// all a context needs to know is how to execute a filter
filter.run
}
}
}
void main() {
context = new Context();
filter_a = new Filter(context, params_a);
filter_b = new Filter(context, params_b);
context.applyFilter(filter_a);
context.applyFilter(filter_b);
context.run();
}
我事先为伪代码道歉。根据您示例的语法,我猜您使用的是 Java 或 C++。我也不知道,但我尝试遵循相同的语法。
我希望这能对这个问题有所了解。让我知道我是否可以使任何事情更清楚。
最好的!