More Related Content More from beom kyun choi (20) GoF Mediator 패턴3. 최초 가입 폼
아이디를 입력하면
활성화 됨
중복확인
아이디
암호
암호확인 암호를 입력하면
활성화 됨
이메일
아이디, 암호,
이메일을 입력하면
가입 취소
활성화 됨
4. 최초 클래스 구조
IDInput PasswordInput
-submitButton : SubmissionButton -submitButton : SubmissionButton
-checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput
CheckDuplicationButton SubmissionButton PasswordConfirmationInput
-checker : IdDuplicationChecker -submitButton : SubmissionButton
CancelButton
IdDuplicationChecker EmailInput
-submitButton : SubmissionButton -submitButton : SubmissionButton
5. 코드
class IdInput {
CheckDuplicationButton checkButton;
void changed() {
if (value.length > 0) {
checkButton.enable();
} else {
class CheckDuplicationButton {
checkButton.disable();
IdDuplicationChecker checker;
}
}
void onclick() {
}
checker.check();
}
class IdDuplicationChecker {
}
SumissionButton submitButton;
void check() {
…
submitButton.setCheckPassed(true);
}
}
6. 기능이 추가된 가입 폼
madvirus 중복확인
아이디
암호
중복확인이 되면
암호확인
활성화 됨
이메일
가입 취소
7. 기능 추가가 반영된 클래스
IDInput PasswordInput
-submitButton : SubmissionButton -submitButton : SubmissionButton
-checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput
CheckDuplicationButton SubmissionButton PasswordConfirmationInput
-checker : IdDuplicationChecker -submitButton : SubmissionButton
CancelButton
IdDuplicationChecker
-submitButton : SubmissionButton EmailInput
-passwordInput : PasswordInput -submitButton : SubmissionButton
-emailInput : EmailInput
8. 신규 클래스∙객체 기능의 추가
→ 객체간 커넥션 개수 증가
출처: http://www.flickr.com/photos/samuelhteer/767956429/sizes/o/
9. 클래스가 증가하면,,,
객체 간
기능이 다수의 재사용성 클래스
커넥션
클래스로 분산 향상 개수 증가
증가
10. 재사용이 어려워지는 시기 발생
IDInput PasswordInput
-submitButton : SubmissionButton -submitButton : SubmissionButton
-checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput
CheckDuplicationButton SubmissionButton PasswordConfirmationInput
-checker : IdDuplicationChecker -submitButton : SubmissionButton
난 Id 중복 검사 기능만
재사용하고 싶었을 CancelButton
뿐이고~
IdDuplicationChecker
-submitButton : SubmissionButton EmailInput
-passwordInput : PasswordInput -submitButton : SubmissionButton
-emailInput : EmailInput
이미지 출처 http://bbs2.agora.media.daum.net/gaia/do/
kin/read?bbsId=K151&articleId=25003
11. 결국 거대한 한 놈(monolith)이 됨
IDInput PasswordInput
재사용 -submitButton : SubmissionButton -submitButton : SubmissionButton
-checkButton : CheckDuplicationButton -confirmationInput : PasswordConfirmationInput
CheckDuplicationButton SubmissionButton PasswordConfirmationInput
-checker : IdDuplicationChecker -submitButton : SubmissionButton
CancelButton
IdDuplicationChecker
-submitButton : SubmissionButton EmailInput
-passwordInput : PasswordInput -submitButton : SubmissionButton
-emailInput : EmailInput
변경 확장
12. 해결안 - Mediator로 커뮤니케이션 추상화
Mediator - 객체들 간의 교류를 제어하고 조정한다
id : Input duplicationCheckButton : Button
password : Input
submissionButton : Button
: RegistrationDirector
passwordConfirmation : Input
cancelButton : Button
email : Input : IdDuplicationChecker
각 Colleague들은 Mediator를 통해서
간접적으로 다른 Colleague와 통신
14. 언제 쓸까?
• 많은 객체들이 복잡하게 얽혀 있어서
– 구조나 동작 방식의 이해가 어려울 때
– 객체의 재사용이 어려울 때
• 다수의 클래스에 분산된 기능을
– 상속을 사용하지 않고 커스터마이징하고 싶을 때
15. Mediator 패턴의 구조 정리
Mediator Colleague
-mediator : Mediator
ConcreteMediator ConcreteColleague2 ConcreteColleague1
16. 적용 결과
• 기능 구현 및 협업 제어가 Mediator에 집중
– 객체들이 어떻게 협업하는 지를 추상화
– 협업 변경 필요시 Mediator만 변경/상속하면 됨
– Mediator 복잡도 증가 → Mediator 유지보수 문제
• Colleague 간 커플링 제거
– 다른 Colleague에 영향없이 Colleague의 재사용, 기
능 추가, 수정 가능
• 객체간 프로토콜이 m-n에서 1-n으로 단순화
– 이해, 유지보수, 확장이 쉬워짐
17. Mediator-Colleague 연동 구현 1
• Mediator에 수싞 전용 인터페이스 추가
Mediator Colleague
+colleagueChanged(colleague : Colleague)
ConcreteMediator Colleague1 Colleague2