一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

中介者模式一多人聊天室

 WindySky 2018-02-25

一模式定義

中介者模式,用一個中介對象來封裝一系列對象之間的交互,使各個對象中不需要顯示地引用其他對象實(shí)例,從而降低各個對象之間的耦合度,并且可以獨(dú)立地改變對象間的交互關(guān)系。

 

二模式舉例

1模式分析

我們借用多人聊天室來說明這一模式



 

2中介模式靜態(tài)類圖



 

3代碼示例

3.1中介者接口——IMediator

Java代碼  收藏代碼
  1. package com.demo.mediator;  
  2.   
  3. import com.demo.colleague.IUser;  
  4.   
  5. /** 
  6.  * 中介者接口 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public interface IMediator {  
  12.     /** 
  13.      * 注冊用戶信息 
  14.      *  
  15.      * @param user 
  16.      */  
  17.     public void regist(IUser user);  
  18.   
  19.     /** 
  20.      * 發(fā)送消息給所有人 
  21.      *  
  22.      * @param user 
  23.      *            發(fā)送消息人 
  24.      */  
  25.     public void notifyAllMessage(IUser user);  
  26. }  

3.2中介者實(shí)現(xiàn)——ConcreteMediator

Java代碼  收藏代碼
  1. package com.demo.mediator;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6.   
  7. import com.demo.colleague.IUser;  
  8.   
  9. /** 
  10.  * 中介者實(shí)現(xiàn)類 
  11.  *  
  12.  * @author 
  13.  *  
  14.  */  
  15. public class ConcreteMediator implements IMediator {  
  16.     private final List<IUser> list = new ArrayList<IUser>();  
  17.   
  18.     /** 
  19.      * 注冊用戶信息 
  20.      *  
  21.      * @param user 
  22.      */  
  23.     public void regist(IUser user) {  
  24.         if (user != null && !list.contains(user)) {  
  25.             list.add(user);  
  26.         }  
  27.     }  
  28.   
  29.     /** 
  30.      * 發(fā)送消息 
  31.      *  
  32.      * @param user 
  33.      *            發(fā)送消息人 
  34.      */  
  35.     public void notifyAllMessage(IUser user) {  
  36.         Iterator<IUser> iterator = list.iterator();  
  37.         IUser tmpUser = null;  
  38.         while (iterator.hasNext()) {  
  39.             tmpUser = iterator.next();  
  40.             if (tmpUser != null && !tmpUser.equals(user)) {  
  41.                 // 排除發(fā)送消息用戶  
  42.                 tmpUser.receiveMessage(user.getMessage());  
  43.             }  
  44.         }  
  45.     }  
  46. }  

3.3用戶接口——IUser

Java代碼  收藏代碼
  1. package com.demo.colleague;  
  2.   
  3. /** 
  4.  * 用戶接口 
  5.  *  
  6.  * @author 
  7.  *  
  8.  */  
  9. public interface IUser  
  10. {  
  11.     /** 
  12.      * 接收消息 
  13.      *  
  14.      * @param message 
  15.      *            消息 
  16.      */  
  17.     public void receiveMessage(String message);  
  18.   
  19.     /** 
  20.      * 發(fā)送消息 
  21.      *  
  22.      * @param message 
  23.      *            消息 
  24.      */  
  25.     public void sendMessage(String message);  
  26.   
  27.     /** 
  28.      * 獲得發(fā)送的消息內(nèi)容 
  29.      *  
  30.      * @return 
  31.      */  
  32.     public String getMessage();  
  33. }  

3.4抽象用戶——AbstractUser

Java代碼  收藏代碼
  1. package com.demo.colleague;  
  2.   
  3. import com.demo.mediator.IMediator;  
  4.   
  5. /** 
  6.  * 抽象用戶信息 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public abstract class AbstractUser implements IUser  
  12. {  
  13.     // 中介者  
  14.     protected IMediator mediator;  
  15.     // 姓名  
  16.     protected String name;  
  17.     // 消息  
  18.     protected String message;  
  19.   
  20.     public AbstractUser(IMediator mediator, String name)  
  21.     {  
  22.         this.mediator = mediator;  
  23.         this.name = name;  
  24.   
  25.     }  
  26.   
  27.     /** 
  28.      * 發(fā)送消息 
  29.      *  
  30.      * @param message 
  31.      *            消息 
  32.      */  
  33.     public void sendMessage(String message)  
  34.     {  
  35.         this.message = message;  
  36.         System.out.println(this.name + " 說:" + this.message);  
  37.         mediator.notifyAllMessage(this);  
  38.     }  
  39.   
  40.     public String getMessage()  
  41.     {  
  42.         return message;  
  43.     }  
  44. }  

3.5用戶A——UserA

Java代碼  收藏代碼
  1. package com.demo.colleague;  
  2.   
  3. import com.demo.mediator.IMediator;  
  4.   
  5. /** 
  6.  * 用戶A 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public class UserA extends AbstractUser {  
  12.     public UserA(IMediator mediator, String name) {  
  13.         super(mediator, name);  
  14.         // 注冊到中介者對象中  
  15.         mediator.regist(this);  
  16.     }  
  17.   
  18.     /** 
  19.      * 接收消息方法 
  20.      */  
  21.     public void receiveMessage(String message) {  
  22.         System.out.println("User A Received Message : " + message);  
  23.     }  
  24. }  

3.6用戶B——UserB

Java代碼  收藏代碼
  1. package com.demo.colleague;  
  2.   
  3. import com.demo.mediator.IMediator;  
  4.   
  5. /** 
  6.  * 用戶B 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public class UserB extends AbstractUser {  
  12.     public UserB(IMediator mediator, String name) {  
  13.         super(mediator, name);  
  14.         // 注冊到中介者對象中  
  15.         mediator.regist(this);  
  16.     }  
  17.   
  18.     /** 
  19.      * 接收消息方法 
  20.      */  
  21.     public void receiveMessage(String message) {  
  22.         System.out.println("User B Received Message : " + message);  
  23.     }  
  24. }  

3.7用戶C——UserC

Java代碼  收藏代碼
  1. package com.demo.colleague;  
  2.   
  3. import com.demo.mediator.IMediator;  
  4.   
  5. /** 
  6.  * 用戶C 
  7.  *  
  8.  * @author 
  9.  *  
  10.  */  
  11. public class UserC extends AbstractUser {  
  12.     public UserC(IMediator mediator, String name) {  
  13.         super(mediator, name);  
  14.         // 注冊到中介者對象中  
  15.         mediator.regist(this);  
  16.     }  
  17.   
  18.     /** 
  19.      * 接收消息方法 
  20.      */  
  21.     public void receiveMessage(String message) {  
  22.         System.out.println("User C Received Message : " + message);  
  23.     }  
  24. }  

3.8運(yùn)行多人聊天室

Java代碼  收藏代碼
  1. package com.demo;  
  2.   
  3. import com.demo.colleague.IUser;  
  4. import com.demo.colleague.UserA;  
  5. import com.demo.colleague.UserB;  
  6. import com.demo.colleague.UserC;  
  7. import com.demo.mediator.ConcreteMediator;  
  8. import com.demo.mediator.IMediator;  
  9.   
  10. /** 
  11.  *  
  12.  * 主應(yīng)用程序 
  13.  *  
  14.  * @author 
  15.  *  
  16.  */  
  17. public class Client {  
  18.   
  19.     /** 
  20.      * @param args 
  21.      */  
  22.     public static void main(String[] args) {  
  23.         // 創(chuàng)建聊天室(中介者)  
  24.         IMediator mediator = new ConcreteMediator();  
  25.         // 創(chuàng)建用戶信息  
  26.         IUser userA = new UserA(mediator, "張三");  
  27.         IUser userB = new UserB(mediator, "李四");  
  28.         IUser userC = new UserC(mediator, "王五");  
  29.   
  30.         System.out  
  31.                 .println("============================================================");  
  32.         userA.sendMessage("大家好,我叫張三!初來乍到,請多多關(guān)照!");  
  33.         System.out  
  34.                 .println("============================================================\n");  
  35.   
  36.         System.out  
  37.                 .println("============================================================");  
  38.         userB.sendMessage("你好,我叫李四,歡迎加入!");  
  39.         System.out  
  40.                 .println("============================================================\n");  
  41.   
  42.         System.out  
  43.                 .println("============================================================");  
  44.         userC.sendMessage("我是王五,歡迎歡迎!");  
  45.         System.out  
  46.                 .println("============================================================\n");  
  47.   
  48.     }  
  49. }  

4運(yùn)行結(jié)果

============================================================

張三 說:大家好,我叫張三!初來乍到,請多多關(guān)照!

User B Received Message : 大家好,我叫張三!初來乍到,請多多關(guān)照!

User C Received Message : 大家好,我叫張三!初來乍到,請多多關(guān)照!

============================================================

 

============================================================

李四 說:你好,我叫李四,歡迎加入!

User A Received Message : 你好,我叫李四,歡迎加入!

User C Received Message : 你好,我叫李四,歡迎加入!

============================================================

 

============================================================

王五 說:我是王五,歡迎歡迎!

User A Received Message : 我是王五,歡迎歡迎!

User B Received Message : 我是王五,歡迎歡迎!

============================================================

 

三該模式設(shè)計(jì)原則

1一對多的對象依賴轉(zhuǎn)化為一對一依賴

2集中控制提高類的復(fù)用性

 

四使用場合

(1)一組對象以定義良好但復(fù)雜的方式進(jìn)行通信,產(chǎn)生相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解。注意多個對象之間的相互依賴。

(2)想定制一個分布在多個類的行為,而不想生成太多的子類場合。

(3)產(chǎn)品架構(gòu)的研發(fā),更需要易于擴(kuò)展的場合。

 

五中介模式靜態(tài)類圖


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美午夜视频免费观看| 亚洲中文字幕熟女丝袜久久| 亚洲国产欧美精品久久| 亚洲欧美日韩熟女第一页| 国产精品日本女优在线观看| 国产成人精品资源在线观看| 欧美一区二区三区播放| 亚洲最大的中文字幕在线视频| 国产欧美一区二区另类精品| 97人摸人人澡人人人超碰| 国产精品自拍杆香蕉视频| 精品伊人久久大香线蕉综合| 欧美区一区二区在线观看| 一区二区日本一区二区欧美| 99久久婷婷国产亚洲综合精品| 日本在线不卡高清欧美| 国产日韩欧美在线亚洲| 有坂深雪中文字幕亚洲中文| 爱在午夜降临前在线观看| 污污黄黄的成年亚洲毛片| 欧美精品久久99九九| 欧美二区视频在线观看| 亚洲夫妻性生活免费视频| 成人精品亚洲欧美日韩| 午夜精品一区二区三区国产| 高潮少妇高潮久久精品99| 亚洲专区中文字幕在线| 成人精品日韩专区在线观看 | 久热久热精品视频在线观看| 黑丝袜美女老师的小逼逼| 中文字幕日韩一区二区不卡| 成年女人下边潮喷毛片免费| 色婷婷日本视频在线观看| 欧美综合色婷婷欧美激情| 国产在线一区二区免费| 黄片在线观看一区二区三区| 日韩三级黄色大片免费观看| 亚洲黄香蕉视频免费看| 白白操白白在线免费观看| 国内九一激情白浆发布| 成人三级视频在线观看不卡|