Methdology/Design Pattern 24

Intepreter - 언어로 문제를 해결하기

When Using It 언어로 문제를 해결하기 Class Diagram Sample Code  public interface AbstractExpression { public void interprete(Context context); } public class TerminalExpression implements AbstractExpression { @Override public void interprete(Context context) { String token = context.currentToken(); if (!"go".equals(token) ) { new NonTerminalExpression().interprete(context); } else { System.out.println("g..

Command - 명령을 클래스로 표현하기

When Using It 명령을 클래스로 표현하고 싶을때 Class Diagram Sample Code  public interface Command { public void execute(); } public class ConcreteCommand implements Command { private Receiver receiver = new Receiver(); @Override public void execute() { receiver.action(); } } public class Receiver { public void action() { System.out.println("Action Performed!!!"); } } public class Invoker { private List comma..

State - 클래스로 상태 표현하기

When Using It 조건에 따른 상태 자체를 클래스로 표현하고 싶을때 Class Diagram Sample Code public interface State { public void handle(Context context, boolean condition); } public class ConcreteState implements State { @Override public void handle(Context context, boolean condition) { if (condition) { System.out.println("ConcreteState Handled."); } else { context.setState(new ConcreteState2()); } } } public class Con..

Observer - 자신의 상태를 전달하기

When Using It 자신의 상태에 변화가 일어났을 경우 Observer들에게 통보하기 Class Diagram Sample Code  public interface Observer { public void update(Subject subject); } public class ConcreteObserver implements Observer { @Override public void update(Subject subject) { System.out.println(subject.getState()); } } public abstract class Subject { private List observers = new ArrayList(); public void attach(Observer observ..

Mediator - 중개인을 통해 지시내리기

When Using It 다수의 객체에 통합적인 지시를 내리기 위한 패턴. 클래스의 기능들을 분할하여 세분화된 클래스로 내렸을때, 세분화된 클래스간의 통신이 필요할때 유용하다. Class Diagram Sample Code public interface Mediator { } public class ConcreteMediator implements Mediator { private Colleague colleague; private Colleague colleague2; public void initializeColleague() { colleague = new Colleague(); colleague2 = new Colleague(); colleague.setMediator(this); colleagu..

Chain of Responsibility - 처리자 연결하기

When Using It 다수의 처리자들을 연결하고 싶을때 Class Diagram Sample Code  public abstract class Handler { private Handler nextHandler; public abstract boolean handleRequest(); public final void setNext(Handler handler) { this.nextHandler = handler; } public final void process() { if (handleRequest() == false) { if ( nextHandler != null) { nextHandler.handleRequest(); } } } } public class ConcreteHandler exte..

Vistor - 데이터 구조를 방문하기

When Using It 특정한 데이터 구조 가진 오브젝트를 방문하면서 처리를 하고 싶을때 Class Diagram Sample Code  public interface Element { public void accept(Visitor visitor); public void add(Element element); public List getChildren(); } public class ConcreteElement implements Element { private List children = new ArrayList(); @Override public void accept(Visitor visitor) { visitor.visitConcreteElement(this); } @Override publi..

Strategy - 알고리즘 교체 하기

When Using It 알고리즘 구현 부분을 교체 하고 싶을때 Class Diagram Sample Code  public interface Strategy { public void algorithmInterface(); } public class ConcreteStrategy implements Strategy { @Override public void algorithmInterface() { } } public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void contextInteface() { strategy.algorithmInter..

Template Method - 구체적인 수행을 하위로 위임하기

When Using It 하위클래스에 구현을 위임하고 싶을때 Class Diagram Sample Code  public abstract class AbstractClass { public abstract void templateMethod1(); public abstract void templateMethod2(); public abstract void templateMethod3(); public void execute() { templateMethod1(); templateMethod2(); templateMethod3(); } } public class ConcreteClass extends AbstractClass { @Override public void templateMethod1() {}..