设计模式20Mediator

设计模式20Mediator

ID:40313351

大小:24.83 KB

页数:4页

时间:2019-07-30

设计模式20Mediator_第1页
设计模式20Mediator_第2页
设计模式20Mediator_第3页
设计模式20Mediator_第4页
资源描述:

《设计模式20Mediator》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、无废话C#设计模式之二十:Mediator意图用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。场景我们知道,一个网络游戏往往有很多大区。每一个大区可以是一组服务器,也可以是多组服务器,在这里假设一个大区是一组服务器。为了效率,一般每个大区都会有一个数据库,玩家的创建角色、充值、消费行为只是在这一个大区中有效。现在公司有了新的需求,那就是玩家的一些信息能在多个大区中共享。比如,在注册的时候就把玩家的账户信息写入多个信息共享的大区,玩家在某个大区中充值需要“通知”其它大区修改账户余额,

2、玩家在某个大区中消费也需要“通知”其它大区修改账户余额。如果我们现在有ABC三个大区,下面的方法可以实现需求:l        网站的注册方法调用A、B和C大区的注册方法l        A大区的充值方法调用B和C的充值方法l        B大区的充值方法调用A和C的充值方法l        C大区的充值方法调用A和B的充值方法l        A大区的消费方法调用B和C的充值方法l        B大区的消费方法调用A和C的充值方法l        C大区的消费方法调用A和B的充值方法我想,没有人会这么做吧。你肯定会想到在一个统一的地方去维护所有大区的信

3、息,任何一个大区的行为不直接和其它大区的行为关联,它们所有的行为都提交到一个统一的地方(假设它是AccountSystem)去处理。这么做有几个好处:l        各大区不需要关心还有哪些其它的大区,它只直接和AccountSystem对话。l        只需要调整AccountSystem就能调整各大区之间的交互行为,比如我们仅仅希望A和B大区共享信息、C和D大区共享信息,那么对于这种交互策略的改变也需要修改AccountSystem。l        有利于大区的扩充,有了新的大区后,我们不用在大区中考虑它的交互行为,统一交给AccountSys

4、tem去安排。现在,再来看看引入AccountSystem后的通讯:l        网站调用AccountSystem的注册方法(1)l        AccountSystem调用A、B和C大区的注册方法(2)l        A、B和C大区的充值方法调用AccountSystem的充值方法(3)l        A、B和C大区的消费方法调用AccountSystem的充值方法(4)l        AccountSystem的充值方法调用A、B和C大区的专有充值方法(只针对本大区的充值)(5)l        AccountSystem的充值方法调用A

5、、B和C大区的专有消费方法(只针对本大区的消费)(6)至此,你已经实现了中介者模式。你可能会觉得,(1)和(2)非常类似门面模式,没错,它确实就是门面模式,而有了(3)~(6)的行为,AccountSystem也就是一个中介者的角色了。示例代码usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceMediatorExample{classProgram{staticvoidMain(string[]args){AccountSystemaccountSystem=newAc

6、countSystem();GameSystemgameArea1=newGameArea1(accountSystem);GameSystemgameArea2=newGameArea2(accountSystem);accountSystem.RegisterGameArea(gameArea1);accountSystem.RegisterGameArea(gameArea2);stringuserName="aaa";accountSystem.CreateAccount(userName);gameArea1.Recharge(userName,2

7、00);gameArea2.Consume(userName,50);accountSystem.QueryBalance(userName);}}classAccountSystem{privateDictionaryuserBalance=newDictionary();privateListgameAreaList=newList();publicvoidRegisterGameArea(GameSystemgs){gameAreaList.Add(gs);

8、}publicvoidCreateAccount(s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。