この記事では、仲介モードに基づいたマルチパーソンチャットルーム機能の実装について説明します。次のように、参照のために共有してください。
パターン定義
メディエーターパターンは、メディエーターオブジェクトを使用して一連のオブジェクト間の相互作用をカプセル化するため、他のオブジェクトインスタンスを各オブジェクトに表示する必要はなく、各オブジェクト間の結合度を減らし、オブジェクト間の相互作用関係を独立して変更します。
2番目のモードの例
1パターン分析
このパターンを説明するために、複数人のチャットルームを借りています
2調停モード静的クラス図
3つのコードの例
3.1中間インターフェイス-Imediator
パッケージcom.demo.mediator; import com.demo.colleague.iuser;/** *中間インターフェイス * * @author * */public interface imediator {/** *登録ユーザー情報 * * @paramユーザー */public void登録(iuserユーザー); / ***すべての人にメッセージを送信** @paramユーザー*メッセージ送信*/ public void notifyallmessage(iuser user);}3.2中間実装-ConcreTemediator
パッケージcom.demo.mediator; import java.util.arraylist; import java.util.iterator; import java.util.list; import com.demo.colleague.iuser;/** * Intermediary実装 * * @author * */public class concretemediator {private final list = new <iuser arraylist <iuser>(); / ** *登録ユーザー情報 * * @paramユーザー */ public void regist(iuser user){if(user!= null &&!list.contains(user)){list.add(user); }} / ***メッセージを送信** @paramユーザー*メッセージを送信* / 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
パッケージcom.demo.colleague;/** *ユーザーインターフェイス * * @author * */public interface iuser {/** *メッセージメッセージ * * @paramメッセージ *メッセージ */public void receivemessage(string message); / ***メッセージを送信** @paramメッセージ*メッセージ*/ public void sendmessage(string message); / ** *メッセージコンテンツが送信されます * * @return */ public string getMessage();}3.4 Abstractuser -Abstractuser
パッケージcom.demo.colleague; Import com.demo.mediator.imedator;/** * abstractユーザー情報 * * @author * */public abstract class abstractuser iser {//中間保護imediatorメディエーター; //名前保護された文字列名。 //メッセージ保護された文字列メッセージ。 public abstractuser(imedator mediator、string name){this.mediator = mediator; this.name = name; } / ***メッセージを送信** @paramメッセージ*メッセージ* / public void sendmessage(string message){this.message = message; System.out.println(this.name + "say:" + this.message); mediator.notifyallmessage(this); } public string getMessage(){return message; }}3.5ユーザーA-ユーザー
パッケージcom.demo.colleague; import com.demo.mediator.imediator;/** * user a * * @author * */public class usera extends abstractuser {public usera(imediator mediator、string name){super(mediator、name); // mediator.regist(this)に登録します。 } / ***メッセージメソッドを受信* / public void receivemessage(string message){system.out.println( "ユーザーA受信メッセージ:" +メッセージ); }}3.6ユーザーB-ユーザーB
パッケージcom.demo.colleague; import com.demo.mediator.imediator;/** * user b * * @author * */public class userb extends abstractuser {public userb(imediator mediator、string name){super(mediator、name); // Mediator Object Mediator.regist(this)に登録します。 } / ***メッセージメソッド受信}}3.7ユーザーC -USERC
パッケージcom.demo.colleague; Import com.demo.mediator.imediator;/** * user c * * @author * */public class userc extends abstractuser {public userc(imediator mediator、string name){super(mediator、name); // Mediator Object Mediator.regist(this)に登録します。 } / ***メッセージメソッドを受信* / public void receivemessage(string message){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.demo.demo.demo.mediator.mediator; */public class client {/** *@param args */public static void main(string [] args){//チャットルーム(メディエーター)imediatorメディエーター= new ConcreTemediator(); //ユーザー情報の作成iuser usera = new usera(Mediator、 "Zhang San"); iuser userb = new userb(mediator、 "li si"); iuser userc = new userc(mediator、 "wang wu"); System.out .println( "============================================================================================================================== ===================================================================================================================================== ============================================================================================================= ===================================================================================================================================== .println( "==================================================================== ============================================================================== ============================================================================== ============================================================================= ============================================================================== ============================================================================== ============================================================================== ============================================================================= .println( "==================================================================== ============================================================================== ============================================================================== ============================================================================= ============================================================================== ============================================================================== ============================================================================== ============================================================================= .println( "================================================================4ランニング結果
=====================================================================================================================
チャン・サンは言った:みなさん、こんにちは、私の名前はチャン・サンです!私はあなたにぴったりです、私の世話をしてください!
ユーザーB受信メッセージ:みなさん、こんにちは、私の名前はZhang Sanです!私はあなたにぴったりです、私の世話をしてください!
ユーザーCはメッセージを受け取りました:みなさん、こんにちは、私の名前はZhang Sanです!私はあなたにぴったりです、私の世話をしてください!
=====================================================================================================================
=====================================================================================================================
li Siは言った:こんにちは、私の名前はli si、歓迎です!
ユーザーの受信メッセージ:こんにちは、私の名前はli siです、歓迎です!
ユーザーCはメッセージを受け取りました:こんにちは、私の名前はli siです、歓迎です!
=====================================================================================================================
=====================================================================================================================
王ウーは言った:私はワン・ウー、ようこそ!
ユーザーは受け取ったメッセージ:私は王王です、ようこそ!
ユーザーBはメッセージを受け取りました:私はワン・ウーです、ようこそ!
=====================================================================================================================
このパターンのデザインの3つの原則
1 1対多くのオブジェクト依存関係は、1対1の依存関係に変換されます
2集中型制御により、クラスの再利用性が向上します
4つの使用機会
(1)オブジェクトのグループは、明確に定義されているが複雑な方法で通信し、相互依存構造を理解するのが困難で困難になります。複数のオブジェクト間の相互依存に注意してください。
(2)複数のクラスで分散された動作をカスタマイズしたいが、あまりにも多くのサブクラスを生成したくない。
(3)製品アーキテクチャの研究開発には、より多くの拡大する機会が必要です。
5つの中間モード静的クラス図
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。