我有一个名为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/