首页 / 软件开发 / C# / 无废话C#设计模式之二十:Mediator
无废话C#设计模式之二十:Mediator2010-01-13 博客园 lovecherry意图用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。场景我们知道,一个网络游戏往往有很多大区。每一个大区可以是一组服务器,也可以是多组服务器,在这里假设一个大区是一组服务器。为了效率,一般每个大区都会有一个数据库,玩家的创建角色、充值、消费行为只是在这一个大区中有效。现在公司有了新的需求,那就是玩家的一些信息能在多个大区中共享。比如,在注册的时候就把玩家的账户信息写入多个信息共享的大区,玩家在某个大区中充值需要“通知”其它大区修改账户余额,玩家在某个大区中消费也需要“通知”其它大区修改账户余额。如果我们现在有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的充值方法我想,没有人会这么做吧。你肯定会想到在一个统一的地方去维护所有大区的信息,任何一个大区的行为不直接和其它大区的行为关联,它们所有的行为都提交到一个统一的地方(假设它是AccountSystem)去处理。这么做有几个好处:l 各大区不需要关心还有哪些其它的大区,它只直接和AccountSystem对话。l 只需要调整AccountSystem就能调整各大区之间的交互行为,比如我们仅仅希望A和B大区共享信息、C和D大区共享信息,那么对于这种交互策略的改变也需要修改AccountSystem。l 有利于大区的扩充,有了新的大区后,我们不用在大区中考虑它的交互行为,统一交给AccountSystem去安排。