Cześć, w miarę jak poznaję nowe wzorce staram się (może trochę na upartego) jakoś je wpleść do tego co robie. Równolegle uczę się Javy i chciałem zaimplementować koszyk na zakupy. Trzy głowne obiekty, to sklep, klient i koszyk. Koszyk może być pusty, pełny, albo zapłcony, więc postanowiłem wykorzystać wzorzec stan. Mniej więcej coś takiego:

interface CartState {
    void addItem(CartItem cartItem, int quantity, ShoppingCart shoppingCart);

    void removeItem(CartItem cartItem, int quantity, ShoppingCart shoppingCart);

    void pay(ShoppingCart shoppingCart);

    Box packItems(ShoppingCart shoppingCart);
}

Domyślnie initjalizuję sklep jakimiś produktami w określonej ilości, co za tym idzie, żeby klient mógł włożyć produkt koszyka musimy sprawdzić, czy sklep może nam zapewnić ten produkt. Chciałem, żeby cała interakcja odbywała się przez koszyk, na zasadzie jak wyżej, więc pomyślałem o wzorcu wizytor. W końcu, żeby wrzucić produkt do koszyka, musimy go najpierw zabrać ze sklepu, więc koszyk "odwiedzał by" sklep w celu ustalenia czy wszystko jest. Czy przypadkiem nie ma innego lepszego rozwiązania?

Przyszła mi też w między czasie do głowy Fasada, do zarządzania tym wszystkim. Może to jest rozwiązanie?

Ponieważ struktury typu Listy i Mapy itd. są mi jeszcze mało znane, którą z nich proponowalibyście do przechowywania produktów? Wydaje mi się, że ArrayList w tym wypadku będzie dobrym wyborem. Trochę zastanawia mnie usuwanie produktów z tego typu struktur, bo zauważyłem, że żeby usunąć np. produkt A to muszę podać ten produkt (obiekt), albo index tego produktu. Chciałem móc podać np. typ produktu (enum) i ilość. Jak można to zaimplementować i która z powyższych struktur najbardziej by się do tego nadawała?

Za całość zabierałem się kilka razy, ale zawsze się gdzieś zamotałem, więc może coś podpowiecie.