Archetípus (programtervezési minta)

A Wikipédiából, a szabad enciklopédiából

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[szerkesztés]

  • 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[szerkesztés]

Java példa[szerkesztés]

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[szerkesztés]

  1. Basford, P: GTS, 2009.

Fordítás[szerkeszté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.