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.Basford, P: GTS, 2009. 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
Fájl:ClassModel.jpg
Fájl:Send Request.jpg
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
Fordítás
Kategória:Programtervezési minták Kategória:Java-kódpéldák