Witam
Zgaduję ,że to program na zajęcia i jeśli tematem było jak najbardziej skomplikowane zakodowanie programu hello world(wpisz w googlach <<hello world="world" design="design" patterns="patterns">>. Pozdrów profesora.
Normalnie to powinno działać tak,że techniki obiektowe mają niejako ułatwić problem a nie stanowić jego dodatkowe utrudnienie ale skoro taka jest treść zadania to proponuję.
Klasa InsuranceFactory będzie zwracała dana implementację obiektu implementujacego interfejs polisa. Do tego dojdzie nam klasa klienta implementująca interfejs client, a ponieważ nie wiemy w która stronę rozwinie się system to rozdzielamy hierarchię interfejsów od implementacji przy pomocy klasy ClientInuranceBridge. Teraz każdy klient może spłacać polisę po swojemu ,wiec dochodzi hierarchia obiektów implementujących interfejs InsurancePayStrategy , która będzie zawierał klient, ale aby nasz system pozostał elastyczny wydzielmy spłacanie polisy z klienta i zaimplementujmy w osobnym obiekcie spłacanie rat. Aby clienta i komponent spłacający uczynić bardziej niezależnymi wprowadzamy klasę PayInsuranceCommand , która będzie wykonywała nam spłatę owej polisy. A ponieważ spłata spłacie nierówna i jej implementacja może się zmieniać dodajmy sobie może jakiegoś PayInsuranceVisitatora.
Ale co jeśli chcemy opłacić opłaconą polisę? Najlepiej niech jej Stan zadecyduje o jej zachowaniu. Więc dochodzą nam dwie nowe implementacje PaidInsurance i UnpaidInsurance.
Oczywiście klientów może być więcej, więc aby było bardziej obiektowo użyjemy sobie wzorca kompozyt do przechowywania i wzorca iterator do iterowania.Kolejne dwa obiekty.
Na sam koniec zróbmy obiekt PaiyngFasade ,która będzie miała tylko jedną metodę i ukryje złożoność rozwiązania przed klientem.
Autor nie bierze odpowiedzialności za powyższe rozwiązanie, stosowanie go w innych celach niż edukacyjnych tylko na odpowiedzialność osoby trzeciej.
Pozdrów Profesora
PS. Na pewno macie masę pomysłów jak owe rozwiązanie uczynić bardziej obiektowym : )
pozdrawiam