Mediator Design [중재자 디자인]

  1. Design Object [디자인목적]

    1. 객체와 객체 사이의 관계가 강하여, 한 객체의 변경에 의해 다른 객체까지 변경되어야 할 경우, 중재자 객체를 두어 결합도를 낮추는 방법
    2. 객체와 객체간 결합도를 낮추어야 할 경우, 객체들 사이의 관계가 복잡할 경우, 객체사이에 중재자를 두어 객체의 결합도를 낮출때.
  2. Options [대안들]

    1. 옵저버 패턴

    2. 파사드 패턴

  3. Benefit [디자인 장점]

    1. 객체의 캡슐화를 강화 -> 결합도 저

    2. [단점]중재자 객체가 신(God) 클래스가 될 수 있음.

  4. Structure & Sample Code [구조와 샘플코드]

    1) 데이터 선택에 따른 텍스트 박스 내용 변경

    1. UML

    2. 구조
      -> List의 내용에 따라 InputText 의 값을 바꾸는 구조
      -> Mediator 없이 List 의 변화 시 바로 InputTex.value를 변경하면 간단하지만, 어플리케이션이 커질 경우, List의 변경에 의해 InputText가 변경되어야 할 가능성이 있음.
      -> Screendirector 인터페이스 : Mediator의 인터페이스. 중재자가 가져야할 공통 함수를 갖는다.
      -> ScreenDirectorOne 객체 : Screendirector 구현체. 중재할 InputText를 attribute로 갖고, InputText의 값을 셋팅.
      -> InputText : List의 변화에 따라 Mediator를 거쳐 값이 변화

  5. Source code

    1. Client
public class Client {

    public static void main(String[] args) {

        List list = new List();
        InputText text = new InputText();

        // Mediator
        ScreenDirectorOne screendirector = new ScreenDirectorOne();
        // Setting objects in mediator
        screendirector.setInputText(text);
        // Setting Mediator in objects
        list.setScreendirector(screendirector);


        list.getItems().add("Data item one");
        list.getItems().add("Data item two");
        list.getItems().add("Data item three");

        list.selectItem(2);

        System.out.println("Selected value is: "+text.getValue());




    }

}
  • List
import java.util.ArrayList;

public class List {

    // List for save item data
    private java.util.List<String> items = new ArrayList<String>();
    // Mediator
    private Screendirector screendirector;

    // set value which will be input into InputText using mediator
    public void selectItem(int itemNumber){
        String item = items.get(itemNumber);
        /**
         * If mediator is not null, set value using mediator
         */
        if(screendirector !=null){
            screendirector.itemSelected(item);
        }
    }


    public java.util.List<String> getItems() {
        return items;
    }

    // Set proper mediator
    public void setScreendirector(Screendirector screendirector) {
        this.screendirector = screendirector;
    }
}
  • Screendirector : Interface
public interface Screendirector {

    void itemSelected(String item);

}
  • ScreendirectorOne
public class ScreenDirectorOne implements Screendirector{

    private InputText inputText;

    @Override
    public void itemSelected(String item) {
        inputText.setValue(item);
    }

    // Set input box which mediated by mediator
    public void setInputText(InputText inputText) {
        this.inputText = inputText;
    }
}
  • InputText
public class InputText {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

results matching ""

    No results matching ""