模式名稱:適配器模式
生活場景:把電話網通過網口傳送數據給筆記本,把電視網數據通過網口傳送數據給筆記本電腦。
終極目標:實現多網合一。
1.不假思索的思路:獲取電話網和電視網的數據信息後再傳到筆記本中
2.類結構圖:
代碼瀏覽:
namespace Adapter
{
#region 網口
/// <summary>
/// 網口接口
/// </summary>
interface IInternetAccess
{
Byte[] SendInternetAccessData(); //傳送網口數據
}
/// <summary>
/// 網口類
/// </summary>
class InternetAccess : IInternetAccess
{
private byte[] internetAccessData;
public Byte[] SendInternetAccessData()
{
return internetAccessData;
}
}
#endregion
#region 電話
/// <summary>
/// 電話接口
/// </summary>
interface IPOTS
{
Byte[] SendPOTSData(); //傳送電話數據
}
/// <summary>
/// 電話類
/// </summary>
class POTS : IPOTS
{
private byte[] POTSData;
public byte[] SendPOTSData()
{
return POTSData;
}
}
#endregion
#region 電視
/// <summary>
/// 電視接口
/// </summary>
interface ITelevisionInterface
{
Byte[] SendTelevisionData(); //傳送電視接口上的數據
}
/// <summary>
/// 電視類
/// </summary>
class TelevisionInterface : ITelevisionInterface
{
private byte[] televisionData;
public byte[] SendTelevisionData()
{
return televisionData;
}
}
#endregion
#region 筆記本電腦類
/// <summary>
/// 筆記本電腦類
/// </summary>
class Computer
{
public byte[] GetOutterFile(IInternetAccess internetAccess) //讀取外部網絡數據
{
return internetAccess.SendInternetAccessData(); //讀取網口中的數據
}
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //筆記本電腦
InternetAccess internetAccess = new InternetAccess(); //正常網口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //電話接口
Byte[] data1 = com.GetOutterFile(post); //報錯
TelevisionInterface televisionInterface = new TelevisionInterface();//電視接口
Byte[] data2 = com.GetOutterFile(televisionInterface);//報錯
}
}
}
存在問題:數據不兼容
2.歸納階段
歸納步驟一
當前目標:實現數據兼容
思路:生產一箇中間件,能將電話接口和網口,電視接口和網口相適應。
類結構圖:
代碼瀏覽:
#region 適配器
/// <summary>
/// 電話接口網口中間件,適配器
/// </summary>
class PAdapter : IInternetAccess
{
public PAdapter(POTS post)
{
ipost = post;
}
public byte[] SendInternetAccessData()
{
return ipost.SendPOTSData();
}
private IPOTS ipost;
}
/// <summary>
/// 電視接口網口中間件,適配器
/// </summary>
class TAdapter : IInternetAccess
{
public TAdapter(TelevisionInterface televisionInterface)
{
iTelevisionInterface = televisionInterface;
}
public byte[] SendInternetAccessData()
{
return iTelevisionInterface.SendTelevisionData();
}
private ITelevisionInterface iTelevisionInterface;
}
#endregion
class Program
{
static void Main(string[] args)
{
Computer com = new Computer(); //筆記本電腦
InternetAccess internetAccess = new InternetAccess(); //正常網口
Byte[] data = com.GetOutterFile(internetAccess);
POTS post = new POTS(); //電話接口
PAdapter pAdapter = new PAdapter(post); //中間件,適配器
Byte[] data1=com.GetOutterFile(pAdapter);
TelevisionInterface televisionInterface = new TelevisionInterface();//電視接口
TAdapter tAdapter = new TAdapter(televisionInterface); //中間件,適配器
Byte[] data2 = com.GetOutterFile(tAdapter);
}
}
設計體會:適配器很適合於解決兼容性的問題