1. 전체 요약
1. 저자는 그것에 대해 간단히 이야기합니다
일상 생활에서 간단한 예를 들어 보겠습니다. 우리가 부동산 기관에 가서 주택을 임대 할 때, 부동산 기관은 임차인과 집주인의 임대인 사이에 중개자를 형성합니다. 임차인은 누구를 임대하는지 신경 쓰지 않습니다. 집주인의 임대인은 자신이 누구에게 임대하는지 신경 쓰지 않습니다. 이 거래는 중개자의 존재로 인해 매우 편리해졌습니다.
소프트웨어 개발 프로세스 중에는 필연적으로 여러 클래스 나 서브 시스템이 서로 상호 작용하는 상황이 없으며 상호 작용이 매우 복잡하여 각 클래스가 상호 작용 해야하는 클래스를 알아야하므로 커플 링이 매우 강력 해 보일 수 있습니다. 몸 전체가 한 번의 움직임에 영향을 받고 결과는 매우 심각하며 큰 곰은 매우 화가납니다! ~~~~ (> _ <) ~~~~
자, 질문이 제기 되었으므로이 문제에서 주인공을 초대하십시오 - 중개자 모델이 나타납니다.
중개의 기능은 물체 간의 상호 작용을 캡슐화하는 것입니다. 객체의 작업이 다른 관련 객체를 변경 하고이 객체가 이러한 관계를 스스로 처리하고 싶지 않으면 중개자를 찾아서 이러한 번거로운 관계를 처리 할 수 있습니다. 다음 작은 예를 참조하십시오.
코드 사본은 다음과 같습니다.
var particate = function (name) {
this.name = 이름;
this.chatroom = null;
};
참가자. prototype = {
보내기 : 함수 (메시지, to) {
this.chatroom.send (메시지, this, to);
},
수신 : 함수 (메시지, From) {
log.add (from.name + "~" + this.name + ":" + message);
}
};
var chatroom = function () {
var 참가자 = {};
반품 {
레지스터 : 기능 (참가자) {
참가자 [참가자 .name] = 참가자;
참가자 .Chatroom = this;
},
보내기 : 함수 (메시지,부터,) {
if (to) {
to.receive (메시지, From);
} 또 다른 {
(참가자의 키) {
if (참가자 [key]! == from) {
참가자 [key] .receive (메시지, from);
}
}
}
}
};
};
var log = (function () {
var log = "";
반품 {
추가 : 함수 (msg) {log + = msg + "/n"; },
show : function () {alert (log); log = ""; }
}
}) ();
함수 run () {
var yoko = 새로운 참가자 ( "요코");
var John = 새로운 참가자 ( "John");
var paul = 새로운 참가자 ( "Paul");
var ringo = 새로운 참가자 ( "ringo");
var chatroom = new Chatroom ();
chatroom.register (Yoko);
chatroom.register (John);
chatroom.register (폴);
chatroom.register (ringo);
Yoko.Send ( "필요한 것은 사랑뿐입니다.");
Yoko.Send ( "사랑해 요한.");
John.Send ( "이봐, 방송 할 필요 없다", 요코);
Paul.Send ( "하, 들었어!");
Ringo.Send ( "폴, 어떻게 생각하십니까?", 폴);
log.show ();
}
샘플 코드에는 4 명의 참가자가 있으며 채팅방 (MediaRy)을 등록하여 채팅 세션에 가입하십시오. 각 참가자의 참가자 대표. 참가자는 서로에게 메시지를 보내고 경로를 채팅방으로 처리합니다.
여기에서 채팅방 개체는 중개자의 역할을 수행하고, 다른 물체를 조정하며, 합리적으로 구성하며, 커플 링을 줄입니다.
2. 소스 코드 케이스 참조
우리는 MVC 3 계층 모델 고체 모델 (모델), 프레젠테이션 층 (보기) 및 제어 계층 (제어/중재자)에 매우 익숙해야합니다.
제어층은 프리젠 테이션 계층과 모델 계층 사이의 중개자입니다. 일반적으로 MVC는 프레임 워크 설계에서 중개 모델의 응용이기도합니다.
3. 사례 소개
코드 사본은 다음과 같습니다.
기능 플레이어 (이름) {
this.points = 0;
this.name = 이름;
}
player.prototype.play = function () {
this.points += 1;
Mediator.played ();
};
var scoreboard = {
요소 : document.getElementById ( 'results'),
업데이트 : 함수 (score) {
var i, msg = '';
for (i in score) {
if (score.hasownproperty (i)) {
msg + = '<p> <strong>' + i + '<// strong> :';
msg += 점수 [i];
msg += '<// p>';
}
}
this.element.innerhtml = msg;
}
};
var 중재자 = {
플레이어 : {},
설정 : function () {
var 플레이어 = this.players;
players.home = 새로운 플레이어 ( '홈');
players.guest = 새로운 플레이어 ( '게스트');
},
재생 : function () {
var 플레이어 = this.players,
점수 = {
홈 : players.home.points,
게스트 : players.guest.points
};
스코어 보드 .update (스코어);
},
Keypress : 함수 (e) {
e = e || Window.event;
if (e.which === 49) {
Mediator.players.home.play ();
반품;
}
if (e.which === 48) {
Mediator.players.guest.play ();
반품;
}
}
};
Mediator.setup ();
Window.onkeypress = Mediator.Keypress;
settimeout (function () {
Window.onKeypress = NULL;
Console.log ( '게임 오버!');
}, 30000);
4, 요약합시다
왜 중재자인가?
물체 사이에는 많은 상호 작용이 있습니다. 각 객체의 행동 작업은 서로 의존하여 한 객체의 동작을 수정하고 동시에 다른 많은 객체의 동작을 수정하는 것과 관련이 있습니다.
중재자 모드를 사용하면 각 객체 간의 커플 링이 풀릴 수 있습니다. 당신은 중재자와의 관계에 대해서만 돌보고 다수의 관계를 일대일 관계로 바꾸면됩니다.
시스템의 복잡성을 줄이고 수정 가능한 확장 성을 향상시킬 수 있습니다.
중개 모델을 사용하는 경우
1. 이제 복잡한 의사 소통이 필요한 잘 정의 된 객체 세트.
2. 너무 많은 서브 클래스를 생성하지 않고 여러 클래스에 배포 된 동작을 사용자 정의하십시오.
중재 객체는 주로 행동을 캡슐화하는 데 사용되며 행동의 참가자는 그 대상이지만, 중재자를 통해 이러한 물체는 서로를 알 필요가 없습니다. (Dimit의 법칙의 구체적인 구현)
중개 모델 사용의 장점 :
1. 시스템 객체 간의 커플 링을 줄여서 객체를 독립적으로 쉽게 재사용 할 수 있습니다.
2. 시스템의 유연성을 향상시키고 시스템을 쉽게 확장하고 유지할 수 있도록합니다.
중재자 패턴 사용의 단점 :
이 "중개자"는 더 많은 책임을 가정하기 때문에 중개 모델의 단점은 분명합니다. 따라서 일단 중개 대상에 문제가 발생하면 전체 시스템에 큰 영향을 미칩니다.