Table of Contents

Možné řešení z minulého cvičení

https://gitlab.fel.cvut.cz/B211_B6B36OMO/seminar/-/tree/master/cv6_solution

Teorie

Vzor Abstract Factory

Problém

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.

Řešení

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ů.

Vzor Factory Method

Problém

Potřebujeme skrýt mechanismus vytváření instance nebo přesně není programu zřejmé jakou implementaci pro vytvoření instance použít.

Řešení

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.

Vzor Singleton

Problém

Program potřebuje mít u některých tříd zaručeno, že nevznikne více než 1 instance dané třídy.

Řešení

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.

Dependency injection

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.

Příklady k řešení

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/B231_B6B36OMO/seminar/-/tree/master/cv7_assignment

Implementace ve cvičení 7 bude v následujících krocích

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