Search
https://gitlab.fel.cvut.cz/B181_B6B36OMO/seminar/tree/master/cv6_solution
Program potřebuje pracovat se sadou souvisejících objektů. Těchto sad může být v programu použito více, ale stále mají stejné opakující se prvky.
Vzor abstract factory navrhuje vyčlenit abstraktní faktory třídu, která je předkem pro konkrétní faktory. Tato faktory zajišťuje získání instancí konkrétní sady objektů.
Potřebujeme skrýt mechanismus vytváření instance nebo přesně není programu zřejmé jakou implementaci pro vytvoření instance použít.
Pro vytvoření instance bude existovat rozhraní s definovanou metodou pro vytvoření instance objektu. Vlastní implementace přípravy instance je pak skryta v metodě pro vytváření a nezatěžuje detaily vlastní kód, který instanci potřebuje.
Program potřebuje mít u některých tříd zaručeno, že nevznikne více než 1 instance dané třídy.
Vzor singleton navrhuje neumožnit vytvářet instance pomocí new, ale mít připravenou metodu pro předání instance, která kontroluje, zda již instance existuje. Pokud ano, nevytváří novou instanci, ale pouze předá referenci na již existující instanci.
Jedná se o způsob jak vytváření instanci delegovat na kontejner. Tzn. vlastní kód programu se nezabývá vytvořením objektu, ale prostřednictvím anotace nebo konfigurace žádá externí kontejner o vytvoření instance a vložení reference do objektů. V příkladu bude použito pro dependence injection frameworku Spring Boot.
Cvičení 7 je zaměřeno na praktické využití návrhových vzorů pro vytváření objektů Abstract Factory, Factory Method, Singleton. Dále je ve cvičení 7 příklad na Spring Boot a praktické použití dependency injection.
Základem cvičení 7 je model banky, která poskytuje běžné účty a půjčky. Systém je již z části naprogramovaný a funkční pro jednu banku (v příkladu Uni banka). Úkolem bude implementovat do systému novou banku (Ab banka), která poskytuje stejné produkty, ale s mírně odlišnými podmínkami.
Stáhněte si z repository základ cvičení 7:
https://gitlab.fel.cvut.cz/B181_B6B36OMO/seminar/tree/master/cv7_assignment
1) Vzor abstract factory a factory method
Implementace tříd pro novou banku - v package cz.cvut.fel.omo.cv7.ab implementujte třídy AbBankFactory - konkrétní třídu odvozenou z AbstractBankFactory, AbBankOffice, AbAccount, AbLoan - konkrétní produkty, které implementují interface BankOfffice, Account a Loan.
Při implementaci splňte následující požadavky:
2) Vzor Singleton
Upravte implementaci UniBankFactory a AbBankFaktory, aby splňovala podmínku pro vytvoření pouze jedné instance. Implementujte metodu getInstance podle vzoru Singleton. Ve třídě Main upravte způsob vytváření instance factory tak, aby používala metodu getInstance.
3) Dependency injection