我有一个名为ChainHandler的抽象类和ChainHandler的许多实现。

其他程序员将编写该ChainHandler的其他实现。

我的程序实现了责任链设计模式。

ChainHandler的每个具体实现都实现一个handle方法。

public abstract void handle(SomeclassA a);


如果一个处理程序可以处理“ a”,则它将处理它,并且链停止。如果不是,则将“ a”传递到下一个处理程序,直到它到达链的末尾。

我希望每个具体处理程序都具有能够处理的所有“ a”的列表。但是我不想让具体的类开发人员记住将其写入成功列表。

有一种优雅的方法吗?

我最好的主意如下:

1-在具体类中将handle方法更改为protected,使其返回布尔值并将名称更改为innerhandle;

2-将抽象类的handle方法更改为public,并调用innerhandle。成功后,它将对象添加到列表中。

最佳答案

第二种选择肯定更好(并且依赖于Template method pattern),这对于实现错误子类的人来说更加困难,您甚至可以使handle方法成为最终方法,因此没人能改变它的行为并破坏它。没有注意到它。

Servlet API有这样一个示例,可以重写采用ServletConfig参数的init方法,并且很常见,人们会忘记调用super和原始的init(ServletConfig)方法,因此,您应尽量避免发生同样的错误。

关于java - 责任链记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7114965/

10-11 03:31