熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#設計模式:Adapter[1]

2013-11-13 12:12:27  來源: .NET編程 

  意圖

  把一個類的接口變換成客戶端所期待的另一種接口從而使原本接口不匹配而無法在一起工作的兩個類能夠在一起工作
 
  場景

  假設網絡游戲的客戶端程序分兩部分一部分是和服務端通訊的大廳部分大廳部分提供的功能有道具購買讀取房間列表創建房間以及啟動游戲程 序另一部分就是游戲程序了游戲程序和大廳程序雖然屬於一個客戶端但是由不同的公司在進行開發游戲大廳通過實現約定的接口和游戲程序進行通訊

  一開始的設計就是大廳程序是基於接口方式調用游戲程序啟動游戲場景方法的在大廳程序開發接近完成的時候公司決定和另外一家游戲公司合作 因此希望把大廳程序能適用另一個游戲而這個新游戲的遵循的是另一套接口是不是可以避免修改原先調用方法來啟動場景呢?或許你會說既然只有一個方法修 改那麼修改一下也無妨我們假設大廳程序和游戲程序之間有個接口其中的大部分都有修改呢?因為游戲程序接口的修改大廳程序可能要修改不止 個地方這樣接口的意義何在呢?

  此時可以考慮使用Adapter模式來適配這種接口的不匹配情況

using System;
using SystemCollectionsGeneric;
using SystemText;
namespace AdapterExample
{
class Program
{
static void Main(string[] args)
{
Lobby lobby = new Lobby();
lobbyCreateRoom(HalfPaper);
lobbyStartGame();
}
}
interface IGame
{
void StartScene(string sceneName);
void EnterPlayer(string playerName);
}
class Lobby
{
private string sceneName;
public void CreateRoom(string sceneName)
{
thissceneName = sceneName;
}
public void StartGame()
{
IGame game = new GameAdapter();
gameStartScene(sceneName);
gameEnterPlayer(yzhu);
}
}
class Game
{
public void LoadScene(string sceneName string token)
{
if (token == Abcd)
ConsoleWriteLine(Loading + sceneName + );
else
ConsoleWriteLine(Invalid token!);
}
public void EnterPlayer(int playerID)
{
ConsoleWriteLine(player: + playerID + entered);
}
}
class GameAdapter : IGame
{
private Game game = new Game();
public void StartScene(string sceneName)
{
gameLoadScene(sceneName Abcd);
}
public void EnterPlayer(string playerName)
{
gameEnterPlayer(GetPlayerIDByPlayerName(playerName));
}
private int GetPlayerIDByPlayerName(string playerName)
{
return ;
}
}
}

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15401.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.