在我当前的项目中,我定义了以下接口(interface):
public interface CmdExecutor {
void execute(String[] tokens, OutputStream outputStream, List<ServerWorker> serverWorkers) throws IOException;
}
每个CmdExecutor
需要 token 和outputStream,但在执行他的工作后,我需要更新List<ServerWorker>
中的一些信息.
有一些设计模式可以帮助我避免将此列表传递给每个 worker 吗? 我听说过使用“事件总线”,除了这种方法之外还有其他选择吗?
谢谢
编辑:
也许我表达得不正确。我的意思是全部我的CmdExecutor
需求String[] tokens
但只有一些需要使用OutputStream outputStream
和List<ServerWorker> serverWorkers
。
因此,我发现在界面中硬编码所有可选参数是一个糟糕的设计,只是因为某些实现需要它们。
我尝试了工厂模式,但后来我必须在工厂中添加所有可选参数。通过这种方式,工厂可以将正确的参数传递给每个需要它们的实现。
是否有某种模式可以用来分离我的对象的职责? 类似于:观察者模式?监听器模式?事件?
我在互联网上读了很多这样的名字,但我不明白哪一个适合我的需要。
谢谢
最佳答案
您可以使用overload对于遵循现有方法的默认方法,传递一个空列表作为第三个参数。
不确定这是否符合任何特定设计模式的描述。
public interface CmdExecutor {
void execute(String[] tokens, OutputStream outputStream, List<ServerWorker> serverWorkers) throws IOException;
default void execute(String[] tokens, OutputStream outputStream) throws IOException {
execute(tokens, outputStream, Collections.emptyList());
}
}
关于java - 设计模式以避免传递不必要的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61455567/