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