Использование Command-Pattern для создания объекта и добавления его в ArrayList - PullRequest
0 голосов
/ 21 июня 2019

У меня есть проблема, чтобы понять упражнение.Что мне нужно сделать, это:

  1. Разные пользователи должны иметь возможность добавлять и удалять заявки в тикет-системе (в списке)
  2. Я должен сделать это с помощью Command-Дизайн-паттерн

Но я на самом деле не знаю, как это сделать.Я думал о следующем:

Ученик нажимает кнопку «createTicketForinsideBuildingDamage» - Кнопка

  • -> это устанавливает для параметра executeCommand значение «insideBuildingDamageCommand» и выполняет его
  • -> это создает класс "insideBuildingDamage" и запрашивает данные, такие как дата, тип, имя ...
  • -> !!!, и это должно быть автоматически добавлено в список Ticketsystemlist !!!но как я могу это сделать?

Или я совершенно не прав?Я не хочу такого решения, как полный код.Но идея, как я могу это сделать.Спасибо

1 Ответ

0 голосов
/ 22 июня 2019

Во-первых, я думаю, вы должны понимать, как работает шаблон проектирования и как классы взаимодействуют друг с другом.Вы можете увидеть пример здесь https://refactoring.guru/design-patterns/command.

Мой способ сделать это:

Command.java

// concrete commands will implement this interface
// you can also use an abstract class if you want to have certain attributes, such as a TicketSystem
public interface Command { 
    // this method can be set to return something useful instead of void, if needed
    void execute();
}

AddTicketCommand.java

public class AddTicketCommand implements Command {
    // TicketSystem and Ticket attributes

    // constructor that initializes the attributes

    @Override
    public void execute() {
        // add the Ticket to the TicketSystem
    }
}

Invoker.java

public class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void invoke() {
        command.execute();
    }
}

Поэтому, когда вы хотите использовать определенную команду, вы устанавливаете ее соответственно.Например: invoker.setCommand(new AddTicketCommand(new TicketSystem(), new Ticket())), а затем вызвать его с помощью invoker.invoke().

Надеюсь, это помогло!

...