java - 设计模式以避免传递不必要的参数?

标签 java design-patterns

在我当前的项目中,我定义了以下接口(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 outputStreamList<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/

相关文章:

java - Spring 数据JPA : Check Exists Entity ID with @Query Annotation

java - 在 Java(桌面)应用程序中授权优质内容

java - 如何使用Android连接到内部存储中的sqlite数据库文件?

generics - 返回各种类型的内部表的设计模式

c++ - 在 C++ 中安全地传递对抽象类的引用

java - 为什么 newInstance 在我的代码中抛出 InstantiationException?

java - 表情符号的正则表达式

java - 如何将多个源文件夹添加到 JAR?

iphone - iOS 设备的网页设计

c# - 一段时间后过期单例实例