디자인 모드 - 중개자

5527 단어 디자인 모드
MEDIATOR 중개자
 와 의 독서 노트 를 참고 하 세 요.
1. 의도
중개인 대상 으로 일련의 대상 의 상호작용 을 밀봉 하 다.중개 자 는 각 대상 이 명시 적 으로 서로 인용 하지 않 아 도 되 고 결합 이 느슨 해 지 며 독립 적 으로 그들의 상호작용 을 바 꿀 수 있다.
2. 적용 성
4. 567917. 한 조 의 대상 은 정 의 는 좋 지만 복잡 한 방식 으로 통신 을 한다.상호 의존 관계 구조 가 혼 란 스 럽 고 이해 하기 어렵다
4. 567917. 한 대상 이 다른 대상 을 인용 하고 이 대상 과 직접 통신 하여 이 대상 을 재 활용 하기 어렵다
4. 567917. 여러 가지 유형 에 분포 하 는 행 위 를 만 들 고 싶 지만 너무 많은 자 류 를 만 들 고 싶 지 않다
3. 구조
4. 참여 자
Mediatord (중개자)
                            ——중개인 은 동료 (Colleague) 대상 과 통신 할 수 있 는 인 터 페 이 스 를 정의 합 니 다.
ConcreteMediator (구체 적 인 중개자)
                            ——중개인 이 각 동료 대상 을 조율 하여 협력 행 위 를 실현 하 는 것 을 이해 하 다.
                           ——그것 의 각 동 료 를 이해 하고 보호 하 다.
ColleagueClass (동료 클래스, 하위 클래스 포함)
                           ——모든 동료 류 는 그것 의 중개자 대상 을 안다.
                           ——모든 동료 대상 은 다른 동료 와 통신 해 야 할 때 중개자 와 통신 한다.
5. 협력
동료 가 중개인 대상 에 게 요청 을 보 내 고 받 았 다.중개인 은 각 동료 간 에 협력 행 위 를 실현 하기 위해 현지 리 트 윗 요청 에 적합 하 다.
6. 효과
1)  하위 클래스 생 성 감소;Mediator 는 여러 대상 간 에 분포 되 어 있 던 행동 을 한데 모 았 다.이러한 행 위 를 바 꾸 려 면 Mediator 의 하위 클래스 만 생 성하 면 됩 니 다.이렇게 하면 각 Colleague 류 가 중 용 될 수 있다.
2)  각 Colleague 를 결합 해제 합 니 다.Mediator 는 각 Colleague 간 의 소나무 결합 에 유리 합 니 다.Colleague 류 와 Mediator 류 를 독립 적 으로 바 꾸 고 재 활용 할 수 있 습 니 다.
3)  그것 은 대상 협 의 를 간소화 했다.Mediator 와 각 Colleague 간 의 한 쌍 이상 의 상호작용 으로 여러 쌍 의 상호작용 을 대체 합 니 다.한 쌍 의 많은 관 계 는 이해 하고 유지 하 며 확장 하기 쉽다.
4)  그것 은 대상 이 어떻게 협력 하 는 지 추상 적 으로 진행 했다.중 개 를 하나의 독립 적 인 개념 으로 하고 이 를 하나의 대상 에 봉 하여 주 의 를 대상 각자 의 행위 에서 그들의 상호작용 으로 옮 기 게 한다.이것 은 시스템 의 대상 이 어떻게 상호작용 을 하 는 지 알 아 내 는 데 도움 이 된다.
5)  그것 은 통 제 를 집중 화 시킨다.중개자 모델 은 상호작용 의 복잡성 을 중개자 의 복잡성 으로 바꾼다.중개인 이 협 의 를 봉 인 했 기 때문에, 그것 은 어떤 Colleague 보다 복잡 해 질 수 있다.이것 은 중개인 자신 을 지 키 기 어 려 운 거대 한 물건 으로 만 들 수 있다.
7. 실현
1)   추상 적 인 Mediator 클래스 무시 하기;각 Colleague 가 하나의 Mediator 와 만 일 할 때 추상 적 인 Mediator 류 를 정의 할 필요 가 없습니다.Mediator 클래스 가 제공 하 는 추상 적 인 결합 은 각 Colleague 로 하여 금 서로 다른 Mediator 하위 클래스 와 함께 일 할 수 있 게 하 였 으 며, 반대로 도 마찬가지 입 니 다.
2)  Colleague -- 중재자 통신;관심 있 는 사건 이 발생 했 을 때 Colleague 는 Mediator 와 통신 해 야 합 니 다.하나의 실현 방법 은 Observer 모드 로 Mediator 를 Observer 로 실현 하고 각 Colleague 는 Subset 로 하 며 상태 가 바 뀌 면 Mediator 에 게 알림 을 보 냅 니 다.하나의 방법 은 Mediator 에서 특수 한 알림 인 터 페 이 스 를 정의 하고 각 Colleague 는 통신 할 때 이 인 터 페 이 스 를 직접 호출 하 는 것 이다.
8. 코드 예제
Mediatord
package com.examples.pattern.mediator;

/**
 *    ,             
 */
public interface Mediator {

	/**
	 *                                          
	 * 
	 * @param colleague
	 *                  ,                       
	 */
	public void changed(Colleague colleague);
}

ConcreteMediator
package com.examples.pattern.mediator;

/**
 *         
 */
public class ConcreteMediator implements Mediator {

	/**
	 *        A
	 */
	private ConcreteColleagueA colleagueA;
	/**
	 *        B
	 */
	private ConcreteColleagueB colleagueB;

	/**
	 *                A  
	 * @param colleagueA
	 */
	public void setColleagueA(ConcreteColleagueA colleagueA) {
		this.colleagueA = colleagueA;
	}

	/**
	 *                B  
	 * @param colleagueB
	 */
	public void setColleagueB(ConcreteColleagueB colleagueB) {
		this.colleagueB = colleagueB;
	}

	@Override
	public void changed(Colleague colleague) {
		System.out.println(colleague);
	}

}
 Colleague Class
package com.examples.pattern.mediator;

/**   
*                
*/
public abstract class Colleague {

	/**
	 *        ,                
	 */
	private Mediator mediator;

	/**
	 *      ,       
	 * @param mediator
	 */
	public Colleague(Mediator mediator) {
		this.mediator = mediator;
	}

	/**
	 *                
	 * @return
	 */
	public Mediator getMediator() {
		return mediator;
	}
	
	
	
}
package com.examples.pattern.mediator;

/**   
*        A      
*/
public class ConcreteColleagueA extends Colleague {

	public ConcreteColleagueA(Mediator mediator) {
		super(mediator);
	}
	
	public void someOperation(){
		//             ,       
		getMediator().changed(this);
	}

}
package com.examples.pattern.mediator;

public class ConcreteColleagueB extends Colleague {

	public ConcreteColleagueB(Mediator mediator) {
		super(mediator);
	}
	
	public void someOperation(){
		//             ,       
		getMediator().changed(this);
	}

}
Client
package com.examples.pattern.mediator;

public class Client {

	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();
		ConcreteColleagueA ca = new ConcreteColleagueA(mediator);
		ConcreteColleagueB cb = new ConcreteColleagueB(mediator);
		
		mediator.setColleagueA(ca);
		mediator.setColleagueB(cb);
		
		ca.someOperation();
		cb.someOperation();
		
		
	}

}

9. 관련 모델
Fa ç ade 와 중개자 의 차이 점 은 대상 서브 시스템 을 추상 화하 여 더욱 편리 한 인 터 페 이 스 를 제공 한 다 는 것 이다.그것 의 협 의 는 일방적인 것 이다. 즉, Fa ç ade 대상 이 이 서브 시스템 클래스 에 대해 요 구 를 하지만 그렇지 않 으 면 안 된다.반면 Mediator 는 각 Colleague 대상 이 지원 하지 않 거나 지원 할 수 없 는 협력 행 위 를 제공 하고 협 의 는 다방면 이다.
Colleague 는 Observer 모드 를 사용 하여 Mediator 와 통신 할 수 있 습 니 다.
10. 광의 중개자
우리 의 일반적인 사용 에서 중개 자 모델 을 간소화 하여 개발 을 간단 하 게 만 들 고 다음 과 같은 변화 가 있다.
4. 567917. 보통 동료 대상 의 부 류 를 없 애 면 임의의 대상 이 서로 상호작용 을 해 야 동료 가 될 수 있다
4. 567917. 보통 Mediator 인 터 페 이 스 를 정의 하지 않 고 구체 적 인 중개 자 대상 을 하나의 사례 로 실현 한다
  •  동료 대상 은 중개 자 를 보유 하지 않 고 필요 할 때 중개 자 대상 을 직접 얻 고 호출 합 니 다.중개인 도 동료 대상 을 가지 지 않 고 구체 적 인 처리 방법 에서 만 들 거나 얻 거나 매개 변수 에서 필요 한 동료 대상 을 전달한다
  • 좋은 웹페이지 즐겨찾기