[자바 디자인 패턴] 행동패턴 - 중재자 패턴

2021. 3. 15. 17:26 JAVA/Design Patterns

행동패턴 목록

 

메시지 기반으로 무언가를 구현하려고 할 때 사용하면 유용할 것 같다. 특히 채팅관련 기능은 대부분의 서비스에 들어가기 때문에 꼭 사용되어야 할 것 같다.

장점

 - 클래스 수를 분리합니다.

 - 객체 프로토콜을 단순화 합니다.

 - 제어를 중앙집중화 합니다.

 - 개별 구성요소는 서로에게 메시지를 전달할 필요가 없어집니다.

 

사용시기

 - 채팅 응용프로그램과 같은 메시지 기반 시스템에서 일반적으로 사용됩니다.

 - 일련의 개체가 복잡하지만 잘 정의된 방식으로 통신하는 경우 사용됩니ㅏㄷ.

 

UML

 

ChatRoom Class : ApnaChatRoom, ApnaChatRoomImpl

public interface ApnaChatRoom {  
    public void showMsg(String msg, Participant p);  
}
public class ApnaChatRoomImpl implements ApnaChatRoom{  
    DateFormat dateFormat = new SimpleDateFormat("E dd-MM-yyyy hh:mm a");  
    Date date = new Date();  
    
    @Override  
    public void showMsg(String msg, Participant p) {  
        System.out.println(p.getName()+"'gets message: "+msg);  
        System.out.println("\t\t\t\t"+"["+dateFormat.format(date).toString()+"]");    
    }     
}

 

ChatUser Class : Participant, User

public abstract class Participant {  
    public abstract void sendMsg(String msg);  
    public abstract void setname(String name);  
    public abstract String getName();  
}
public class User extends Participant {  
      
    private String name;  
    private ApnaChatRoom chat;  
    
    public User(ApnaChatRoom chat){  
        this.chat = chat;  
    }  
      
    @Override  
    public void sendMsg(String msg) {  
        chat.showMsg(msg, this);  
    }  
  
    @Override  
    public void setname(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public String getName() {  
        return name;  
    }  
}

 

Operation Class : MediatorPatternDemo

public class MediatorPatternDemo {  
    public static void main(String args[]) {  
        ApnaChatRoom chat = new ApnaChatRoomImpl();  
      
        User u1 = new User(chat);  
        u1.setname("Ashwani Rajput");  
        u1.sendMsg("Hi Ashwani! how are you?");  
        
        User u2 = new User(chat);  
        u2.setname("Soono Jaiswal");  
        u2.sendMsg("I am Fine ! You tell?");  
    }  
}

 

출처 : https://www.javatpoint.com/

know-one-by-one.tistory.com/50