程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之二十:Mediator(1)

無廢話C#設計模式之二十:Mediator(1)

編輯:關於C語言

意圖

用一個中介對象來封裝一系列對象的交互。中介者使得各對象不需要顯式相互引用,從而使其松散耦合,而且可以獨立地改變它們之間的交互。

場景

我們知道,一個網絡游戲往往有很多大區。每一個大區可以是一組服務器,也可以是多組服務器,在這裡假設一個大區是一組服務器。為了效率,一般每個大區都會有一個數據庫,玩家的創建角色、充值、消費行為只是在這一個大區中有效。現在公司有了新的需求,那就是玩家的一些信息能在多個大區中共享。比如,在注冊的時候就把玩家的賬戶信息寫入多個信息共享的大區,玩家在某個大區中充值需要“通知”其它大區修改賬戶余額,玩家在某個大區中消費也需要“通知”其它大區修改賬戶余額。

如果我們現在有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去安排。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved