Java 디자인 모드 재시작 - Mediator Pattern

중개 모델


정의


하나의 중개 대상으로 일련의 대상 상호작용을 봉인하면 중개자는 각 대상이 현식적으로 서로 인용할 필요가 없게 하고 결합을 느슨하게 하며 그들 간의 상호작용을 독립적으로 바꿀 수 있다.

구조 분석


중개자 모델은 조정자 모델이라고도 하는데 분류도에서 보면 모두 세 부분으로 나뉜다.
  • 추상적인 중개자: 동료류 대상에서 중개자 대상까지의 인터페이스를 정의하여 각 동료류 간의 통신에 사용한다.일반적으로 하나 또는 몇 개의 추상적인 사건 방법을 포함하고 하위 클래스에서 실현한다.
  • 중개자 실현 유형: 추상 중개자로부터 계승되어 추상 중개자에서 정의한 사건 방법을 실현한다.동료 클래스에서 메시지를 받고 메시지를 통해 다른 동시 클래스에 영향을 미친다.
  • 동료류: 만약에 한 대상이 다른 대상에게 영향을 주고 다른 대상에게 영향을 받는다면 이 두 대상을 동료류라고 부른다.분류도에서 동료류는 하나밖에 없다. 이것은 사실 현실의 생략이다. 실제 응용에서 동료류는 일반적으로 여러 개로 구성되어 그들 사이에 서로 영향을 주고 의존한다.동료가 많을수록 관계는 복잡해진다.그리고 동료류도 같은 추상류를 계승한 그룹의 실현 구성으로 표현할 수 있다.중개자 모델에서 동료류 간에는 반드시 중개자를 통해서만 소식을 전달할 수 있다.

  • 코드 예


    우리는 채팅방의 실례를 통해 중개자 모델을 보여 준다.예를 들어 여러 사용자가 채팅방에 메시지를 보낼 수 있고 채팅방은 모든 사용자에게 메시지를 표시할 수 있다.우리는 두 종류ChatRoomUser를 만들 것이다.User 대상은 ChatRoom 방법으로 그들의 소식을 공유한다.MediatorPatternDemo 프레젠테이션 클래스에서는 User 객체를 사용하여 커뮤니케이션을 표시합니다.

    1. 브로커 클래스 만들기

    ChatRoom.java
    import java.util.Date;
     
    public class ChatRoom {
       public static void showMessage(User user, String message){
          System.out.println(new Date().toString()
             + " [" + user.getName() +"] : " + message);
       }
    }
    

    2. 사용자 클래스 만들기

    User.java
    public class User {
       private String name;
     
       public String getName() {
          return name;
       }
     
       public void setName(String name) {
          this.name = name;
       }
     
       public User(String name){
          this.name  = name;
       }
     
       public void sendMessage(String message){
          ChatRoom.showMessage(this,message);
       }
    }
    

    3. User 객체를 사용하여 통신 표시

    MediatorPatternDemo.java
    public class MediatorPatternDemo {
       public static void main(String[] args) {
          User robert = new User("Robert");
          User john = new User("John");
     
          robert.sendMessage("Hi! John!");
          john.sendMessage("Hello! Robert!");
       }
    }
    

    모델의 장단점


    장점

  • 유형의 복잡도를 낮추고 일대일을 일대일로 전환한다.
  • 각 유형 간의 결합;
  • 디미트 원칙에 부합한다.

  • 결점


    중개인은 거대해져서 유지하기 어려워진다.

    장면 작업

  • 시스템에서 대상 간에 비교적 복잡한 인용 관계가 존재하여 그들 간의 의존 관계 구조가 혼란스럽고 이 대상을 복용하기 어렵다.
  • 하나의 중간 클래스를 통해 여러 클래스의 행위를 봉하고 싶지만 너무 많은 하위 클래스를 생성하고 싶지 않다.

  • 사용 시 고려 사항


    직책이 혼란스러울 때 사용해서는 안 된다.

    좋은 웹페이지 즐겨찾기