Design patterns 责任链中的HashMap是对模式的滥用吗?
我已经看到CoR模式的一个示例实现,它使用HashMap作为沿着链传递的对象,可能通过处理程序向其添加新内容;代码的概要如下:Design patterns 责任链中的HashMap是对模式的滥用吗?,design-patterns,chain-of-responsibility,Design Patterns,Chain Of Responsibility,我已经看到CoR模式的一个示例实现,它使用HashMap作为沿着链传递的对象,可能通过处理程序向其添加新内容;代码的概要如下: class HandlerImpl implements Handler { Handler next; void handle(HashMap context) { // do handler logic, perhaps adding new stuff to "context" if (next != n
class HandlerImpl implements Handler {
Handler next;
void handle(HashMap context) {
// do handler logic, perhaps adding new stuff to "context"
if (next != null)
next.handle();
}
}
很容易使用,因为处理程序可能会使用新信息增强上下文
,这些信息可以由后续处理程序使用,而无需重复代码。另一方面,处理程序变得相互依赖——它们仍然是松散耦合的,但它们的顺序变得越来越重要
这代码有气味吗?如果我们发现在不向上下文对象补充新信息的情况下无法使用CoR模式,那么在这种情况下应该使用什么样的模式?这取决于“处理程序”打算做什么。另一种方法是将其更改为一个“管道”,该管道声明它需要什么输入,以及它的输出将是什么。输出可以是相同的类型-可能修改了输入对象-也可能是某种转换。这种转变可能只是增加信息,或者做一些完全不同的事情。如果只需要添加信息,那么可以使用合成相当容易地完成
这样,每个处理程序就其需要/产生的数据而言是紧密耦合的(并且是显式的),但就产生和使用该数据的内容而言是松散耦合的
基本上,“最佳方法”将取决于:
- 你想做什么
- 您使用的是哪种语言/平台(它有不变的推力吗?它有静态类型和泛型吗?)