Используйте вспомогательный класс ShoppingCart
.Метод Item
item.addTo(ShoppingCart cart)
добавляет цену к totalSum
корзины, используя shoppingCart.addItem(Item item, int price)
Зависимость от Item
до ShoppingCart
не является невыгодной, если Item
sпредназначены для предметов ShoppingCart
s.
В случае, если Item
s живут исключительно для ShoppingCart
, а класс Item
мал, я бы, скорее всего, получил Item
как внутренний класс ShoppingCart
, так что ShoppingCart
будет иметь доступ к закрытым переменным элементов.
Другие мысли
Это также возможно, хотя и довольно неинтуитивнодизайн, чтобы класс Item
считал сумму (item.calculateSum(List<Item> items)
), так как он может получить доступ к частным частям других элементов, не нарушая инкапсуляцию.Рассмотрим приведенный пример, где getPrice()
возвращает целое число.Если вы захотите изменить это значение на что-то лучше, например, BigDecimal
или на пользовательский тип денег с валютой, это будет невозможно, поскольку тип возврата int
предоставляет внутренний тип.