Singleton, Observer, Factory Method, Command
Definice
- opakovaně použitelná řešení často se opakujících problémů v návrhu OOP softwaru
- nejsou to hotové knihovny nebo kus kódu - jsou to způsoby, jak strukturovat třídy a jejich vztahy
- původ: kniha Design Patterns: Elements of Reusable Object-Oriented Software (1994) od čtveřice autorů známé jako Gang of Four (GoF)
- Gamma, Helm, Johnson, Vlissides
- definovali 23 vzorů rozdělených do tří kategorií
Tři kategorie GoF
- vytvářecí (creational)
- řeší, jak vytvářet objekty, aby kód nebyl pevně svázaný s konkrétními třídami
- Singleton, Factory Method, Builder, Abstract Factory, Prototype…
- strukturální (structural)
- řeší, jak skládat třídy/objekty do větších celků
- Adapter, Composite, Facade…
- behaviorální (behavioral)
- řeší komunikaci mezi objekty a rozdělení odpovědnosti
- Observer, Command, Strategy, State…
Singleton (vytvářecí)
Účel: zaručí, že daná třída má právě jednu instanci v celé aplikaci, a poskytne k ní globální přístup.
Princip:
- privátní konstruktor (nikdo zvenku nemůže udělat
new)
- statická metoda
getInstance(), která instanci vrátí (a při prvním volání vytvoří)
- statické pole drží referenci
class Logger {
private static Logger instance;
private Logger() {} // nikdo zvenku nemůže new
public static Logger getInstance() {
if (instance == null)
instance = new Logger(); // lazy initialization
return instance;
}
}
Použití: logger, konfigurace, cache, Unity: třídy typu GameManager, AudioManager.
Výhody:
- jistota, že existuje jen jedna instance (např. jeden zápis do log souboru)