Java 如何调整代码以供不同实体使用?

Java 如何调整代码以供不同实体使用?,java,output,Java,Output,我已经开始修改代码库中较旧的部分,并意识到我犯了过度使用System.out.printf()方法的错误。以前,该类将处理操作服务器的CLI用户发出的命令,但是现在我添加了连接客户端的功能,使其基本上成为管理员(假设初始CLI用户已向客户端发出admin状态)。 为了避免重写大量代码库,我认为最好的办法是使用与CLI用户相同的类/方法发出管理客户端发出的某些命令(因此客户端的命令与CLI用户的命令具有完全相同的效果,因此客户端可能会看到与CLI用户相同的输出) 我的问题是,我用于CLI用户命令的

我已经开始修改代码库中较旧的部分,并意识到我犯了过度使用
System.out.printf()
方法的错误。以前,该类将处理操作服务器的CLI用户发出的命令,但是现在我添加了连接客户端的功能,使其基本上成为管理员(假设初始CLI用户已向客户端发出
admin
状态)。 为了避免重写大量代码库,我认为最好的办法是使用与CLI用户相同的类/方法发出管理客户端发出的某些命令(因此客户端的命令与CLI用户的命令具有完全相同的效果,因此客户端可能会看到与CLI用户相同的输出)

我的问题是,我用于CLI用户命令的方法在命令输出时使用了
System.out
中的
printf()
方法。如何调整此类,以便CLI用户和客户端都可以获得相同的输出

需要注意的事项:

  • 客户端
    指的是用户的
    套接字
    连接,该用户正在远程连接,并使用在服务器上注册的用户名

  • 某些方法的输出包含需要与事件“实时”对应的字符串;因此,在这种情况下,从方法返回输出字符串是不合适的

  • 下面是这个类的一个非常粗略的“伪”副本,概述了这个问题。我愿意通过GitHub链接或类似链接向人们展示主类,但我不想一开始就用代码来解决这个问题

代码

    public boolean executeCommand(String[] command) {
        switch (command[0]) {
            case "kill":
                 return kill(command);
            case "clients":
                 if (!clientList.isEmpty())
                    for (String username: clientList.keySet())
                        System.out.printf("%s\t%s\n\n", username, clientList.get(username).getAddress());
                else
                    System.out.println("No clients connected!");
                return true;

            // ...and so on            

            default:
                System.out.printf("\"%s\": command unknown.\n Type \"help\" for a list of commands.\n", command[0]);
         }
    }

    private boolean kill(String[] args) {
        args[1].disconnect(args[2]);
        System.out.printf("Killed %s with reason %s", args[1], args[2]);
    }

在调用旧代码之前,您可以创建自己的
PrintStream
,并将其分配给
System.out
。所有对
System.out
的调用都将写入您的流。

对于长时间的延迟表示抱歉,我们正在等待其他可能的答案,然后才选择一个。这似乎很管用,谢谢。