Шаблон проектирования, чтобы избежать передачи ненужных параметров? - PullRequest
0 голосов
/ 27 апреля 2020

В моем текущем проекте я определил следующий интерфейс:

public interface CmdExecutor {
    void execute(String[] tokens, OutputStream outputStream, List<ServerWorker> serverWorkers) throws IOException;
}

Каждому CmdExecutor нужны токены и outputStream, но после выполнения его работы мне нужно обновить некоторую информацию в List<ServerWorker>.

Есть какой-то шаблон дизайна, который может помочь мне не передавать каждому работнику этот Список? Я слышал об использовании «шины событий», есть какой-то другой вариант, кроме этого подхода?

Спасибо

РЕДАКТИРОВАТЬ:

Возможно, я выразил себя неправильно. Я имел в виду, что все мои CmdExecutor нуждаются String[] tokens, но только некоторым из них необходимо использовать OutputStream outputStream и List<ServerWorker> serverWorkers. Поэтому я нахожу плохой дизайн для жесткого кода в моем интерфейсе всех необязательных параметров только потому, что они нужны какой-то реализации.

Я попробовал заводской шаблон, но затем мне пришлось добавить все необязательные параметры на заводе. Таким образом, фабрика может передавать правильные параметры каждой реализации, которая нуждается в них.

Есть ли какой-то шаблон, который я могу использовать для разделения ответственности моего объекта? Что-то вроде: шаблон наблюдателя? образец слушателя? события?

Я прочитал многие из этих имен на inte rnet, но не могу понять, какое из них соответствует моим потребностям.

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете использовать перегрузку для метода по умолчанию, который относится к существующему методу, передавая пустой список в качестве 3-го аргумента.

Не уверен, что это соответствует описанию любого конкретного c дизайн шаблона.

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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...