Archetípus (programtervezési minta)
Hasonló cikkcímek és megnevezések: Archetípus (egyértelműsítő lap). |
Az archetípus programtervezési minta célja az, hogy elválassza a logikát és a megvalósítást. Ehhez két absztrakt osztályt használ, egy díszítőt a logikához és egy delegáltat a megvalósításhoz. Ehhez tartozik egy gyár, ami összekapcsolja a kettőt; a kapott paraméterek függvényében visszaad egy interfészt, ami szerződés a díszítő, a delegált és a kliens osztály között, amivel megfordítják a kontrollt.[1] A minta használható úgy is, hogy két ág helyett többet hoz be, de az egyes ágaknak nem kell törődniük azzal, hogy a többi ág hogy valósul meg.
Összetevői
- Dekorátor: A dekorátor és leszármazottai kezelik a logikát, például egy számítás elvégzését. Hívni tudják a delegált leszármazottait, ha át akarják adni a felelősséget például az adatok tárolásáért és kommunikációért.
- Delegált: A delegált leszármazottai végzik a rendszerhívásokat, a kommunikációt és az adatok tárolását. Mindezeket a felelősséget megoszthatják egymás között.
- Díszítő: tartalmazza az általános logikát
- Delegáció: hívja a specifikus implementációt
- Gyártó metódus: létrehozza az archetípus kombinációt
UML
Java példa
public interface Request { public void sendRequest(); } public class RequestFactory { public static Request getRequest(String a, String b){ DecoratorRequest dcr = null; DelegateRequest dlr = null; if (a.equals("A")) dcr = new ADecoratorRequest(); if (a.equals("B")) dcr = new BDecoratorRequest(); if (b.equals("Y")) dlr = new YDelegateRequest(); if (b.equals("Z")) dlr = new ZDelegateRequest(); dcr.setDelegate(dlr); return dcr; } } public class App { public static void main(String[] args) { Request cr =null; cr = RequestFactory.getRequest("A","Y"); cr.sendRequest(); cr = RequestFactory.getRequest("A","Z"); cr.sendRequest(); cr = RequestFactory.getRequest("B","Y"); cr.sendRequest(); cr = RequestFactory.getRequest("B","Z"); cr.sendRequest(); } } public abstract class DecoratorRequest implements Request { protected DelegateRequest delegate; public DecoratorRequest() { } public void setDelegate(DelegateRequest delegate) { this.delegate = delegate; } } public abstract class DelegateRequest implements Request { public DelegateRequest () { } } public class ADecoratorRequest extends DecoratorRequest { @Override public void sendRequest() { System.out.print("A-"); delegate.sendRequest(); } } public class BDecoratorRequest extends DecoratorRequest { @Override public void sendRequest() { System.out.print("B-"); delegate.sendRequest(); } } public class YDelegateRequest extends DelegateRequest { @Override public void sendRequest() { System.out.println("-Y"); } } public class ZDelegateRequest extends DelegateRequest { @Override public void sendRequest() { System.out.println("-Z"); } }
Jegyzetek
- ↑ Basford, P: GTS, 2009.
Fordítás
Ez a szócikk részben vagy egészben az Archetype pattern című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.