概念
當螢幕只有D-SUB,但卻要接主機只有DVI插孔的顯示卡時候,需要轉接器來轉換傳送訊號,這種改變既有內容去轉換需要結果時,就需要它。很多人會想,那只要共同有一個Interface去繼承就好啦!
但是像是D-SUB這種已經定型的產品架構,你無法再重新改變它的定義與執行內容,你只能取出它並且改為新產品需要的資訊才能產生結果。
在這個之中,D-SUB被稱為Target,轉換對象;DVI被稱為Adaptee,適配者。
假如功能相差太多的兩種功能/產品,或是適配者有著轉換對象沒有的plugin,那就不適用這種設計模式。
用途
- 機上盒的遙控器本來只有遙控機上盒,但該廠商又發行了電視產品,遙控機需要也能夠遙控該電視產品。
- 軟體大更版的時候,需要新舊相容的狀況下。
參考
XYZ的筆記本:設計模式整理列表阿洲的程式教學:轉接器模式(Adapter Pattern)
技術筆記:Adapter Pattern -- 換個包裝再度利用
CODE (C#)
本範例以「Object Adapter Pattern」此模式架構。首先我們有兩個計算器接頭,一個是舊產品只能用二進制資料,一個是新產品使用十進位資料。
public class BinaryCalculator
{
public void BinaryOut(byte Data)
{
Console.WriteLine("BinaryOut : {0}", Data);
}
}
public class DecimalCalculator
{
public void NormalOut(int Data)
{
Console.WriteLine("NormalOut : {0}", Data);
}
}
新產品出現後,如果要能與舊產品接口互相搭配,就需要轉接器啦!
BinaryCalculator被稱為Target,轉換對象;DecimalCalculator被稱為Adaptee,適配者。
public class DecimalAdapter : BinaryCalculator
{
private DecimalCalculator m_DecimalCalculator;
public DecimalAdapter(DecimalCalculator Target)
{
m_DecimalCalculator = Target;
}
public void BinaryOut(byte Data)
{
decimal decValue = Data;
m_DecimalCalculator.NormalOut((int)decValue);
}
}
最後在main()內執行:
public class Program
{
public static void Main(string[] args)
{
DecimalCalculator dcal = new DecimalCalculator();
DecimalAdapter adapter = new DecimalAdapter(dcal);
adapter.BinaryOut(0x3F);
}
}
以上是超簡略的範例~希望可以幫助到大家!
沒有留言:
張貼留言
歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT