Как повторно использовать метод, но добавить дополнительные функции ко второму? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть метод addUser() в классе Register, который работает как обычная форма, запрашивая у пользователя системы такие вещи, как " firstName ", " lastName ", « имя пользователя » и « пароль ».

class Register {
  void addUser() {
    try {
      System.out.print("First Name:\n> ");
      String firstName = userInput.nextLine();
      (...)
  }
}

Только один раз пользователь зарегистрирован и вошел в систему, он может добавить нового клиенты, использующие метод в классе Customer, который работает так же, как addUser(), но добавляет дополнительные поля, такие как " address " и " email ".

class Customer {

/*At the moment I'm redoing all over again just because it works.
and because I didn't know how to implement in any other way.*/

  void addCustomer() {
    try {
      System.out.print("First Name:\n> ");
      String firstName = userInput.nextLine();

      System.out.print("Address:\n> ");
      String address = userInput.nextLine();
      (...)


Как я могу повторно использовать метод addUser() в классе Customer, используя тот факт, что пользователь вошел в систему как условие? Заранее спасибо за ваше время.

Ответы [ 3 ]

1 голос
/ 30 апреля 2020

Во-первых, я бы предложил вам удалить метод addUser как из Регистра, так и из Клиента - таким образом, у вас есть некоторая гарантия, что метод не привязан к какому-либо конкретному варианту использования и, следовательно, будет использоваться повторно.

Затем вам нужно будет создать механизм для обоих контекстов вызова (Customer и Register) для взаимодействия с методом addUser. Для этого вы можете использовать какой-то объект данных, которым они обмениваются, и затем, как только они получат его обратно, они извлекают данные, которые они хотят, или вы можете позволить им обоим реализовать интерфейс, с помощью которого метод addUser может быть передан, с которым он будет и назад, что он захватывает.

Я не чувствую, что использование наследования является хорошим средством повторного использования в этом случае. Наследование - это то, что нужно делать осторожно, так как оно может также увеличить зависимости. Важно придерживаться идеи, что при использовании наследования наследование двух типов должно иметь определенную связь наследования - я не думаю, что это так.

Так что тогда пользователь Register может вызвать этот addUser метод и класс Customer могут вызвать этот метод addUser, а затем добавить дополнительные поля, которые он включает.

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

Я перефразирую ваш вопрос как «Как я могу сделать мой код менее повторяющимся и легче поддерживать с помощью повторного использования?»

Решение в этом случае заключается в создании многоразовой функции которая выполняет повторяющуюся задачу печати приглашения и чтения с клавиатуры:

public class Console {

  public static String prompt(String field) {
    System.out.print(field + ":\n> ");
    return userInput.nextLine();
  }
}

Затем вы можете упростить другие ваши функции:

void addUser(){
  try {
    String firstName = Console.prompt("First Name");
    (...)
  }
}

void addCustomer(){
  try {
    String firstName = Console.prompt("First Name");
    String address = Console.prompt("Address");
    (...)
  }
}

Другие формы повторного использования являются объектными состав и наследование, но я чувствую, что они не являются необходимыми на основе приведенного вами примера кода.

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

Вы можете использовать статическое c логическое значение, установленное в false (например, isLoggedIn). Если пользователь успешно вошел в систему, измените его на true. Затем вызывайте этот метод в классе Customer (создайте объект Register), только если переменная isLoggedIn равна true

...