Какой механизм c будет наиболее подходящим - PullRequest
0 голосов
/ 21 апреля 2020

Я боролся со следующей проблемой. Существует два класса - Покупатель и Корзина, связанные агрегацией (?), То есть класс Клиента имеет закрытое поле Корзина внутри, поэтому Корзина может быть назначена текущему Покупателю (пользователю / владельцу). Я хочу реализовать другой класс - CheckOutMachine, основной задачей которого будет расчет клиента, а затем распечатка счета. Проблема в том, что я хочу добиться этого двумя разными способами, что-то вроде

public class Main() {
 public static void main(String[] args) {
 // creating necessary objects
 Customer customer = new Customer("James");
 Cart cart = new Cart();
 customer.setCart(cart);
 CheckOut checkOut = new CheckOut();

 // creating products, adding to the Cart
 // ...

 // customer settlement
 checkOut.checksOut(customer)
 checkOut.checksOut(cart)
 }
}

Итак, два совершенно разных объекта в качестве параметров одним методом. Я ищу механизм c, который будет наиболее подходящим в этом сценарии. Сначала мне в голову пришли генерические c типы, но я не могу представить их реализацию, было бы здорово прочитать ваши предложения.

1 Ответ

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

Если Customer и Cart имеют полезный (*) общий суперкласс, вам просто нужен метод, который принимает экземпляр этого класса.

class CheckOut {
  void checksOut(TheCommonSuperClass param) { ... }
}

Если у них нет полезного общий суперкласс, имеет две перегрузки, по одной для каждого типа.

class CheckOut {
  void checksOut(Customer customer) { ... }
  void checksOut(Cart cart) { ... }
}

(*) Под «полезным» я подразумеваю, что суперкласс предоставляет методы для доступа к вещам, которые вам нужны в checksOut метод. Очевидно, они всегда будут иметь a общий суперкласс (java.lang.Object), но это не очень полезно для выполнения каких-либо действий, специфичных для c для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...