gpt4 book ai didi

java - 责任链记录

转载 作者:行者123 更新时间:2023-11-30 09:46:30 24 4
gpt4 key购买 nike

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

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

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

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

public abstract void handle(SomeclassA a);

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

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

有什么优雅的方法吗?

我最好的想法如下:

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

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

最佳答案

第二个选项肯定更好(并且它依赖于 Template method pattern )让实现子类的人更难做错,你甚至可以将 handle 方法设置为 final 所以没有人将永远能够改变它的行为并在不知不觉中崩溃。

servlet API 有这样的例子,带有ServletConfig 参数的init 方法可以被重写,人们经常会忘记调用 super 和原来的方法init(ServletConfig) 方法,所以你应该尽量避免同样的错误。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com