无废话C#设计模式之二十:Mediator
2009-04-02 08:22:59 来源:WEB开发网核心提示:意图 用一个中介对象来封装一系列对象的交互,中介者使得各对象不需要显式相互引用,无废话C#设计模式之二十:Mediator,从而使其松散耦合,而且可以独立地改变它们之间的交互,它们所有的行为都提交到一个统一的地方(假设它是AccountSystem)去处理,这么做有几个好处:l 各大区不需要关心还有哪些其它的大区,场景
意图
用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。
场景
我们知道,一个网络游戏往往有很多大区。每一个大区可以是一组服务器,也可以是多组服务器,在这里假设一个大区是一组服务器。为了效率,一般每个大区都会有一个数据库,玩家的创建角色、充值、消费行为只是在这一个大区中有效。现在公司有了新的需求,那就是玩家的一些信息能在多个大区中共享。比如,在注册的时候就把玩家的账户信息写入多个信息共享的大区,玩家在某个大区中充值需要“通知”其它大区修改账户余额,玩家在某个大区中消费也需要“通知”其它大区修改账户余额。
如果我们现在有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对话。
赞助商链接