programtervezési minta From Wikipedia, the free encyclopedia
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.
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");
}
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.