이 기사에서는 중개 모드를 기반으로 한 다원자 채팅 룸 기능의 구현에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
패턴 정의
중재자 패턴은 매개체 객체를 사용하여 일련의 객체 간의 상호 작용을 캡슐화하여 각 객체에 다른 객체 인스턴스를 표시 할 필요가 없으므로 각 객체 사이의 커플 링 정도를 줄이고 객체 간의 상호 작용 관계를 독립적으로 변경합니다.
두 번째 모드의 예
1 패턴 분석
우리는이 패턴을 설명하기 위해 다인원 대화방을 빌립니다
2 중재 모드 정적 클래스 다이어그램
3 코드 예제
3.1 중개 인터페이스 - 이미 디 에이터
package com.demo.mediator; import com.demo.colleague.iuser;/** * 중간 인터페이스 * * @author */public interface imediator {/** * 등록 된 사용자 정보 * * @param user */public void rgistration (iuser user); / *** 모든 사람에게 메시지 보내기** @param user* 메시지 보내기*/ public void notifyallmessage (iuser user);}3.2 중개 구현 - 콘크리트 의료기
package com.demo.mediator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.demo.colleague.IUser;/** * Intermediary implementation class* * @author * */public class ConcreteMediator implements IMediator { private final List<IUser> list = new ArrayList <Iuser> (); / ** * 등록 된 사용자 정보 * * @param user */ public void regist (iuser user) {if (user! = null &&! list.contains (user)) {list.add (user); }} / *** 메시지 보내기** @param user* 메시지 보내기* / public void notifyallmessage (iuser user) {iterator <iuser> iterator = list.iterator (); iuser tmpuser = null; while (iterator.hasnext ()) {tmpuser = iterator.next (); if (tmpuser! = null &&! tmpuser.equals (user)) {// 메시지 보내기 tmpuser.receiveMessage (user.getMessage ()); }}}}3.3 사용자 인터페이스 -Iuser
package com.demo.colleague;/** * 사용자 인터페이스 * * @author */public interface iuser {/** * 수신 메시지 * * @param message */public void 미주시 (문자열 메시지); / *** 메시지 보내기** @param 메시지* 메시지*/ public void sendMessage (문자열 메시지); / ** * 메시지 내용을 가져옵니다.3.4 AbstractUser -AbstractUser
패키지 com.demo.colleague; import com.demo.mediator.imedator;/** * 추상 사용자 정보 * * @author */public acpract class acpractuser implements iuser {// 중개자 보호 이미제 중재자; // 이름 보호 문자열 이름; // 메시지 보호 문자열 메시지; Public AbstractUser (Imedator Mediator, String Name) {this.Mediator = 중재자; this.name = 이름; } / *** 메시지 보내기** @param 메시지* 메시지* / public void sendMessage (문자열 메시지) {this.message = message; System.out.println (this.name + "say :" + this.message); Mediator.notifyallmessage (this); } public string getMessage () {return message; }}3.5 사용자 A -USERA
package com.demo.colleague; import com.demo.mediator.imediator;/** * user a * * @author */public class usera acplactUser {public usera (Imediator Mediator, String Name) {Super (Mediator, Name); // Mediator.regist (this)에 등록; } / *** 메시지 수신 메소드* / public void HeariveMessage (문자열 메시지) {System.out.println ( "사용자 A 수신 된 메시지 :" + 메시지); }}3.6 사용자 B- 사용자 B
package com.demo.colleague; import com.demo.mediator.imediator;/** * user b * * @author */public class userb acplactUser {public userb (imediator mediator, string name) {super (mediator, name); // 중재자 객체 Mediator.regist (this)에 등록; } / *** 메시지 수신 메소드* / public void HeariveMessage (문자열 메시지) {System.out.println ( "사용자 B 수신 메시지 :" + 메시지); }}3.7 사용자 C -USERC
package com.demo.colleague; import com.demo.mediator.imediator;/** * user c * * @author */public class userc acplactUser {public userc (imediator mediator, string name) {super (mediator, name); // 중재자 객체 Mediator.regist (this)에 등록; } / *** 메시지 수신 메소드* / public void HeariveMessage (문자열 메시지) {System.out.println ( "사용자 C 수신 메시지 :" + 메시지); }}3.8 멀티 플레이어 채팅방 실행
패키지 com.demo; import com.demo.colleague.iuser; import com.demo.colleague.usera; import com.demo.colleague.userb; import com.demo.colleague.userc; import com.demo.mediator.concretemediator; import com.demo.mediator.imediator;/ * @main applictor; */public class client {/** *@param args */public static void main (String [] args) {// 채팅방 생성 (중재자) Imediator Mediator = New Concretemediator (); // 사용자 정보 작성 iuser usera = new Usera (중재자, "Zhang San"); iuser userb = new userB (중재자, "li si"); IUSER USERC = NEW USERC (중재자, "Wang Wu"); System.out .println ( "================================================================================================================= ================================================================================================================ ========================================================================================================= ================================================================================================================ .println ( "============================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== .println ( "============================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== =========================================================================== .println ( "===========================================================================4 실행 결과
===========================================================================================================================
Zhang San Said : 안녕하세요 여러분, 제 이름은 Zhang San입니다! 나는 당신에게 새롭고 제발 나를 돌봐주세요!
사용자 B 수신 메시지 : 안녕하세요 여러분, 제 이름은 Zhang San입니다! 나는 당신에게 새롭고 제발 나를 돌봐주세요!
사용자 C 수신 메시지 : 안녕하세요 여러분, 제 이름은 Zhang San입니다! 나는 당신에게 새롭고 제발 나를 돌봐주세요!
===========================================================================================================================
===========================================================================================================================
Li Si가 말했습니다 : 안녕하세요, 제 이름은 Li Si입니다. 가입에 오신 것을 환영합니다!
사용자 A 수신 메시지 : 안녕하세요, 제 이름은 Li Si입니다. 가입에 오신 것을 환영합니다!
사용자 C를받은 메시지 : 안녕하세요, 제 이름은 Li Si입니다. 가입에 오신 것을 환영합니다!
===========================================================================================================================
===========================================================================================================================
Wang Wu가 말했다 : 나는 Wang Wu, 환영합니다!
사용자 A 수신 된 메시지 : 나는 Wang Wu, 환영합니다!
사용자 B를받은 메시지 : 나는 Wang Wu, 환영합니다!
===========================================================================================================================
이 패턴의 디자인의 세 가지 원리
1 일방적 인 객체 의존성은 일대일 종속성으로 변환됩니다
2 중앙 집중식 제어는 클래스의 재사용 성을 향상시킵니다
4 개의 사용법
(1) 물체 그룹은 잘 정의되어 있지만 복잡한 방식으로 의사 소통하여 혼란스럽고 이해하기 어렵다. 여러 객체 간의 상호 의존성에주의하십시오.
(2) 여러 클래스에 배포 된 동작을 사용자 정의하고 싶지만 너무 많은 서브 클래스를 생성하고 싶지 않습니다.
(3) 제품 아키텍처의 연구 및 개발은 더 많은 확장 기회가 필요합니다.
5 개의 중개 모드 정적 클래스 다이어그램
더 많은 Java 관련 컨텐츠를 위해이 사이트에 관심이있는 독자는 "Java 객체 지향 프로그래밍에 대한 소개 및 고급 튜토리얼", "Java 데이터 구조 및 알고리즘에 대한 자습서", "Java Operation Dom Node Skills 요약", "Java 파일 및 디렉토리 운영 기술 요약"및 "Java Cache Cache 운영 기술 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.