Archetypový vzor - Archetype pattern
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
The Archetypový vzor odděluje logiku od implementace; oddělení se provádí dvěma abstraktními třídami, dekorátorem (pro logiku) a delegátem (pro implementaci). Továrna zpracovává mapování tříd dekoratérů a delegátů a vrací dvojici spojenou s předaným parametrem nebo parametry. Rozhraní je smlouva mezi dekorátorem, delegátem a volající třídou, která vytváří Převrácení odpovědnosti.[1] Tento příklad používá dvě větve, ale můžete mít větve „N“ podle potřeby. Vzor znamená, že jedna větev z rozhraní se nemusí starat o to, jak jiná pobočka operuje, pokud implementuje rozhraní.
Sekce
Natěrač
Potomci třídy dekoratérů zpracovávají logiku, například provádějí výpočet. Potomci dekoratéra pak mohou zavolat potomkům delegovaných, když nebo pokud chtějí předat odpovědnost například za úložiště nebo komunikaci.
Delegát
Potomci třídy toku delegáta zpracovávají implementaci volání subsystému, úložiště nebo komunikace. Různé děti mohou používat úplně jiné úložiště podsystémů nebo komunikaci než ostatní.
UML
Příklad Java
veřejnost rozhraní Žádost { veřejnost prázdnota poslat žádost();}veřejnost třída RequestFactory { veřejnost statický Žádost getRequest(Tětiva A, Tětiva b){ DecoratorRequest dcr = nula; DelegateRequest dlr = nula; -li (A.rovná se("A")) dcr = Nový ADecoratorRequest(); -li (A.rovná se("B")) dcr = Nový BDecoratorRequest(); -li (b.rovná se(„Y“)) dlr = Nový YDelegateRequest(); -li (b.rovná se("Z")) dlr = Nový ZDelegateRequest(); dcr.setDelegate(dlr); vrátit se dcr; }}veřejnost třída Aplikace { veřejnost statický prázdnota hlavní(Tětiva[] args) { Žádost cr = nula; cr = RequestFactory.getRequest("A", „Y“); cr.poslat žádost(); cr = RequestFactory.getRequest("A", "Z"); cr.poslat žádost(); cr = RequestFactory.getRequest("B", „Y“); cr.poslat žádost(); cr = RequestFactory.getRequest("B", "Z"); cr.poslat žádost(); }}veřejnost abstraktní třída DecoratorRequest nářadí Žádost { chráněný DelegateRequest delegát; veřejnost DecoratorRequest() { } veřejnost prázdnota setDelegate(DelegateRequest delegát) { tento.delegát = delegát; }}veřejnost abstraktní třída DelegateRequest nářadí Žádost { veřejnost DelegateRequest () { }}veřejnost třída ADecoratorRequest rozšiřuje DecoratorRequest { @ Přepis veřejnost prázdnota poslat žádost() { Systém.ven.tisk("A-"); delegát.poslat žádost(); }}veřejnost třída BDecoratorRequest rozšiřuje DecoratorRequest { @ Přepis veřejnost prázdnota poslat žádost() { Systém.ven.tisk(„B-“); delegát.poslat žádost(); }}veřejnost třída YDelegateRequest rozšiřuje DelegateRequest { @ Přepis veřejnost prázdnota poslat žádost() { Systém.ven.tisk(„-Y“); }}veřejnost třída ZDelegateRequest rozšiřuje DelegateRequest { @ Přepis veřejnost prázdnota poslat žádost() { Systém.ven.tisk("-Z"); }}
Účastníci
Vzor delegování - požaduje konkrétní implementaci
Dekorativní vzor - provádí zobecněnou logiku
Vzor tovární metody - vytvoří kombinaci archetypů
Reference
- ^ Basford, P: GTS, 2009.
Viz také
- Návrhový vzor (informatika), standardní řešení běžných problémů při návrhu softwaru
- Vzor chování, vzory, které identifikují běžnou komunikaci mezi objekty
- Zprostředkování dat
- Architektonické vzory (referenční architektura EA)