23 설계 모드 20 : Java 중개 모델
정의 : 중재자 객체와 일련의 객체 상호 작용을 캡슐화합니다. 중재자는 각 객체가 디스플레이없이 상호 작용하여 커플 링을 풀고 그들 사이의 상호 작용을 독립적으로 변경하게합니다.
유형 : 행동 패턴
클래스 다이어그램 :
중개 모델의 구조
중개 모드를 중재자 모드라고도합니다. 클래스 다이어그램에서 3 부분으로 나뉩니다.
초록 중재자 : 동료 클래스 객체와 중재자 객체 사이의 인터페이스를 정의하고 각 동료 클래스 간의 커뮤니케이션에 사용됩니다. 일반적으로 하나 또는 여러 개의 추상 이벤트 방법을 포함하며 서브 클래스로 구현됩니다.
중개 구현 클래스 : 추상 중재자로부터 상속 및 추상 중재자에 정의 된 이벤트 방법을 구현합니다. 한 동료 수업에서 메시지를받은 다음 메시지를 통해 다른 동시 클래스에 영향을 미칩니다.
동료 클래스 : 객체가 다른 객체에 영향을 미치고 다른 객체의 영향을받는 경우이 두 객체를 동료 클래스라고합니다. 클래스 다이어그램에는 동료 수업이 하나 뿐이며 실제로는 현실의 생략입니다. 실제 응용 분야에서 동료 수업은 일반적으로 다수로 구성되며 서로 영향을 미치고 의존합니다. 동료가 많을수록 관계가 더 복잡해집니다. 또한 동료 클래스는 동일한 추상 클래스를 상속하는 일련의 구현으로 표시 될 수 있습니다. 중개 모델에서 메시지는 동료들 사이의 중개자를 통해 전송되어야합니다.
중개 모델을 사용하는 이유
일반적으로 동료 수업 간의 관계는 비교적 복잡합니다. 여러 동료 클래스가 상관되면 관계는 복잡한 메쉬 구조로 나타납니다. 이것은 과도하게 결합 된 아키텍처, 즉 클래스 재사용에 도움이되지 않으며 안정적이지 않습니다. 예를 들어, 아래 그림에는 6 개의 동료와 같은 개체가 있습니다. 객체 1이 변경되면 4 개의 객체에 영향을 미칩니다. 객체 2가 변경되면 5 개의 객체에 영향을 미칩니다. 다시 말해, 동료들 사이의 직접적인 상관 관계 설계는 좋지 않습니다.
중개 모델이 도입되면 동료 클래스 간의 관계는 별 구조가됩니다. 그림에서, 우리는 모든 클래스의 변화가 클래스 자체와 중개자에만 영향을 미치므로 시스템의 결합을 줄일 것임을 알 수 있습니다. 좋은 디자인은이 클래스의 모든 객체 관계 처리 로직을 확실히 캡슐화하지는 않지만 특별 클래스를 사용하여 자신이 속하지 않은 동작을 관리합니다.
예제를 사용하여 동료 클래스 A와 B가 있습니다. 각각의 클래스 A와 B가 있으며, 각 클래스는 숫자가 있으며, 클래스 B의 숫자는 클래스 A의 숫자를 항상 100 배나 수정할 때 숫자를 100으로 곱하고 클래스 B에 수정할 때 클래스 A와 Class A와 B를 할당 할 때 Class A 및 B를 할당합니다. 코드는 다음과 같습니다.
Abstract Class AbstractColleague {보호 된 int 번호; public int getNumber () {반환 번호; } public void setNumber (int number) {this.number = 숫자; } // 초록 방법, 숫자를 수정할 때 동시에 관련 객체를 수정하십시오. } Class ColleaGuea 확장 AbstractColleague {public void setNumber (int 번호, AbstractColleague Coll) {this.number = 숫자; coll.setNumber (번호*100); }} Class Colleagueb Extends AbstractColleague {public void setNumber (int 번호, AbstractColleague Coll) {this.number = number; coll.setNumber (번호/100); }} public class client {public static void main (String [] args) {AbstractColleague Colla = New Colleaguea (); AbstractColleague Collb = 새로운 동료 (); System.out.println ( "=============================================== =========================================================================== =========================================================================== ============================================================================ =========================================================================== =========================================================================== =========================================================================== ============================================================================ System.out.println (콜드 번호 값 : "+collb.getnumber ()); 위의 코드에서 클래스 A와 B는 직접 연관성을 통해 관련됩니다. 중개 모델을 사용하려면 클래스 A와 B는 직접 관련이 없습니다. 그들은 연관의 목적을 달성하기 위해 중개자를 사용해야합니다.
Abstract Class AbstractColleague {보호 된 int 번호; public int getNumber () {반환 번호; } public void setNumber (int number) {this.number = 숫자; } // 여기의 매개 변수는 더 이상 동료가 아니라 중개 공개 초록 void setNumber (int 번호, AbstractMediator AM)입니다. } Class Colleaguea 확장 AbstractCoLeague {public void setNumber (int 번호, AbstractMediator Am) {this.number = 숫자; am.aaffectb (); }} Class Colleagueb Extends AbstractColleague {@override public void setNumber (int 번호, AbstractMediator Am) {this.number = number; am.baffecta (); }} 추상 클래스 AbstractMediator {보호 된 AbstractColleague a; 보호 된 AbstractColleague b; Public AbstractMediator (AbstractColleague a, AbstractColleague b) {a = a; B = B; } public Abstract void aaffectb (); 공개 초록 void baffecta (); } 클래스 중재자는 AbstractMediator {public Mediator (AbstractColleague A, AbstractColleague b) {Super (a, b); } // A에 대한 A의 영향을 buval aaffectb () {int number = a.getNumber (); B. 세트 오너 (번호*100); } // 공개 void baffecta () {int number = b.getNumber ()에 대한 B의 영향을 다루고 있습니다. A.SetNumber (번호/100); }} public class client {public static void main (String [] args) {AbstractColleague Colla = New Colleaguea (); AbstractColleague Collb = 새로운 동료 (); AbstractMediator Am = 새로운 중재자 (Colla, Collb); System.out.println ( "====================== 설정에 의한 효과 A ========================================================================================================================= ========================================================================================================= ========================================================================================================= ============================================================================================================================ System.out.println (콜라의 번호 값은 "+colla.getnumber ()); b ==================================================================================================================================== ========================================================================================================================================= ==================================================================================================================================== ========================================================================================================================================= System.out.println ( "콜드 번호 값은"+collb.getnumber ());코드는 비교적 길지만 여전히 이해하기 쉽습니다. 실제로, 원래 객체 관계를 중재 클래스로 처리하는 코드를 다시 포장 하고이 중재 클래스를 통해 객체 간의 관계를 처리하는 것입니다.
중개 모델의 장점
1. 중개 모델을 적절히 사용하면 동료 클래스 간의 과도한 커플 링을 피할 수 있으므로 각 동료 클래스는 비교적 독립적으로 사용할 수 있습니다.
2. 중재자 패턴을 사용하면 객체 간의 일대일 관계를 일대일 관계로 변환하여 객체 간의 관계를 이해하고 유지하기가 쉽습니다.
3. 중개 모델을 사용하면 객체의 동작과 협업을 추상화 할 수 있으며 객체 간의 상호 작용을보다 유연하게 처리 할 수 있습니다.
해당 시나리오
객체 지향 프로그래밍에서 클래스는 필연적으로 다른 클래스에 의존하며 완전히 독립적 인 클래스는 의미가 없습니다. 수업이 여러 클래스에 동시에 의존하는 것도 일반적입니다. 그러한 상황이 존재하기 때문에, 그것은 일대일 의존성이 합리성을 가지고 있음을 의미합니다. 중재자 패턴을 적절하게 사용하면 원래 지저분한 물체 관계를 명확하게 만들 수 있지만 남용되면 부정적인 영향을 줄 수 있습니다. 일반적으로, 중재자 모델은 메쉬 구조가있는 동료 클래스 간의 관계에 대해서만 고려됩니다. 메쉬 구조는 스타 구조로 변환하여 동료 간의 관계를 더 명확하게 만들 수 있습니다.
중개 모델은 비교적 일반적인 모델이며 비교적 남용하기 쉬운 모델입니다. 대부분의 경우, 동료 클래스 간의 관계는 혼란스러운 메쉬 구조에 복잡하지 않습니다. 따라서 대부분의 경우 동료 클래스 내 객체 간의 종속성을 캡슐화해도 괜찮으며 중개 모델을 도입 할 필요가 없습니다. 중개 모델의 남용은 일을 더 복잡하게 만듭니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.