1) 개요
객체들 간의 상호작용 행위를 정리하여 모은 중재자 객체를 따로 두어 관라히는 디자인 패턴입니다.
- 중재자 패턴이 사용되는 경우
- 객체들간의 관계가 매우 복잡하여 객체의 재사용에 부담이 갈 경우
- 장점
1. 객체들 간 수정을 하지않고 관계를 수정할 수 있습니다.
2. 객체들간의 관계의 복잡도, 의존성 및 결합도를 감소시킵니다.
- 단점
1. 중재자 패턴 사용 시 중재자 객체에 권한이 집중화되어 굉장히 크며 복잡해지므로, 설계 및 중재자 객체 수정 시 주의해야 합니다.
2) UML
- Mediator : Colleague 객체간의 상호작용을 위한 인터페이스를 정의합니다.
- ConcreteMediator : Mediator의 인터페이스를 구현하여 객체간의 상호작용을 조정합니다.
- Colleague : 다른 Colleague와의 상호작용을 위한 인터페이스를 정의합니다.
- ConcreteColleague : Colleague의 인터페이스를 구현하며 Mediator를 통해 다른 Colleague와 상호작용합니다.
3) 예제
1 2 3 4 | public interface Command { void land(); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Flight implements Command { private IATCMediator atcMediator; public Flight(IATCMediator atcMediator) { this.atcMediator = atcMediator; } @Override public void land() { if (atcMediator.isLandingOK()) { System.out.println("Successfylly Landed."); atcMediator.setLandingStatus(true); } else { System.out.println("Waiting for Landing."); } } public void getReady() { System.out.println("Ready for landing"); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Runway implements Command{ private IATCMediator atcMediator; public Runway(IATCMediator atcMediator) { this.atcMediator = atcMediator; atcMediator.setLandingStatus(true); } @Override public void land() { System.out.println("Lading permission granted."); atcMediator.setLandingStatus(true); } } | cs |
1 2 3 4 5 6 7 | public interface IATCMediator { public void registerRunway(Runway runway); public void registerFilght(Flight flight); public boolean isLandingOK(); public void setLandingStatus(boolean status); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class ATCMediator implements IATCMediator{ private Flight flight; private Runway runway; public boolean land; @Override public void registerRunway(Runway runway) { this.runway = runway; } @Override public void registerFilght(Flight flight) { this.flight = flight; } @Override public boolean isLandingOK() { return land; } @Override public void setLandingStatus(boolean status) { land = status; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | public class Main { public static void main(String[] args) { IATCMediator atcMediator = new ATCMediator(); Flight cptJack = new Flight(atcMediator); Runway runnerWay = new Runway(atcMediator); atcMediator.registerFilght(cptJack); atcMediator.registerRunway(runnerWay); cptJack.getReady(); runnerWay.land(); cptJack.land(); } } | cs |
RESULT
1 2 3 | Ready for landing Lading permission granted. Successfylly Landed. | cs |
- Reference :
'IT > 디자인 패턴(Design Pattern)' 카테고리의 다른 글
[디자인 패턴] 방문자 패턴(Visitor Pattern) (2) | 2019.02.14 |
---|---|
[디자인 패턴] 메멘토 패턴(Memento Pattern) (0) | 2019.02.13 |
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (0) | 2019.02.11 |
[디자인 패턴] 커맨드 패턴(Command Pattern) (0) | 2019.02.08 |
[디자인 패턴] 책임 연쇄 패턴(Chain of Responsibility Pattern) (1) | 2019.02.07 |