參考:https://www.cnblogs.com/PatrickLiu/p/7660554.html
1.什麼是適配器
2適配器有什麼優勢
3適配器怎麼用
定義:【結構型】設計模式有如下幾種:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。【創建型】的設計模式解決的是對象創建的問題,那【結構型】設計模式解決的是類和對象的組合關係的問題。今天我們就開始講【結構型】設計模式裏面的第一個設計模式,中文名稱:適配器模式,英文名稱:Adapter Pattern。(舉個例子:說起這個模式其實很簡單,在現實生活中也有很多實例,比如:我們手機的充電器,充電器的接頭,有的是把兩相電轉換爲三相電的,當然也有把三相電轉換成兩相電的。我們經常使用筆記本電腦,筆記本電腦的工作電壓和我們家裏照明電壓是不一致的,當然也就需要充電器把照明電壓轉換成筆記本的工作電壓,只有這樣筆記本電腦纔可以正常工作。太多了,就不一一列舉了。我們只要記住一點,適配就是轉換,把不能在一起工作的兩樣東西通過轉換,讓他們可以在一起工作。)
模式的組成
可以看出,在適配器模式的結構圖有以下角色:
(1)、目標角色(Target):定義Client使用的與特定領域相關的接口。
(2)、客戶角色(Client):與符合Target接口的對象協同。
(3)、被適配角色(Adaptee):定義一個已經存在並已經使用的接口,這個接口需要適配。
(4)、適配器角色(Adapte) :適配器模式的核心。它將對被適配Adaptee角色已有的接口轉換爲目標角色Target匹配的接口。對Adaptee的接口與Target接口進行適配.
意圖
將一個類的接口轉換成客戶希望的另一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading;
namespace AdapterModel
{
//適配器模式有類適配器和對象適配器
//適用於
class Program
{
public interface ITwoHole
{
void Request();
}
public class TwoHole : ITwoHole
{
public void Request()
{
Console.WriteLine("這是兩孔插座");
}
}
public class ThreeHole
{
public void ThreeRequest()
{
Console.WriteLine("這是三孔插座");
}
}
/// <summary>
/// 類適配器
/// </summary>
public class AdapterClass: ThreeHole, ITwoHole
{
public void Request()
{
base.ThreeRequest();
}
}
/// <summary>
/// 對象適配器
/// </summary>
public class AdapterObject: ITwoHole
{
private static ThreeHole ThreeHole=new ThreeHole();
public void Request()
{
ThreeHole.ThreeRequest();
}
}
static void Main(string[] args)
{
//類適配器 高耦合 該類所有東西都繼承下來 可以在不修改原有代碼的基礎上來複用現有類,很好地符合 “開閉原則”
ITwoHole twoHole = new AdapterClass();
twoHole.Request();
//對象適配器 可以在不修改原有代碼的基礎上來複用現有類,很好地符合 “開閉原則”(這點是兩種實現方式都具有的)
ITwoHole twoHole1 = new AdapterObject();
twoHole1.Request();
}
}
}
適配器模式哪裏用:集成的時候用,開始的時候不需要去考慮。還有
1.在.NET中複用COM對象:
COM對象不符合.NET對象的接口,使用tlbimp.exe來創建一個Runtime Callable Wrapper(RCW)以使其符合.NET對象的接口,COM Interop就好像是COM和.NET之間的一座橋樑。
2..NET數據訪問類(Adapter變體):
各種數據庫並沒有提供DataSet接口,使用DbDataAdapter可以將任何個數據庫訪問/存取適配到一個DataSet對象上,DbDataAdapter在數據庫和DataSet之間做了很好的適配。當然還有SqlDataAdapter類型了,針對微軟SqlServer類型的數據庫在和DataSet之間進行適配。