設計模式c#語言描述——適配器模式
來源:互聯網
上載者:User
設計 設計模式c#語言描述——適配器(Adapter)模式
*本文參考了《JAVA與模式》的部分內容,適合於設計模式的初學者。
適配器模式把一個類的介面變換成用戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。包括類的適配器模式和對象的適配器模式兩種不同的形式。
類的適配器模式把被適配的類的API轉換成為目標類的API,其靜態結構圖表如下:
模式的角色如下:
目標(Target)角色:這就是所期待得到的介面。注意這裡討論的是類的適配器模式,因此目標不可以是類。
源(Adaptee)角色:現有需要適配的介面。
適配器(Adapter)角色:把源介面轉換成目標介面。
Target;
public interface Target
{
void sampleOperation1();
void sampleOperation2();//源類不包含的方法
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter;
public class Adapter : Adaptee,Target
{
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
類的適配器模式的效果:
使用一個具體類把源適配到目標中,這樣一來,如果源以及源的子類都使用此類適配,就形不通了。
由於適配器類是源的子類,因此可以在適配器類中置換掉(Override)源的一些方法。
與類的適配器模式相似,對象的適配器模式把被適配的類的API轉換成目標類的API,與類的適配器模式不同,對象的適配器模式不是使用繼承關係串連到Adaptee類,而是使用委派關係,類圖如下所示:
Target;
public interface Target
{
void sampleOperation1();
void sampleOperation2();
}// END INTERFACE DEFINITION Target
Adaptee;
public class Adaptee
{
public void sampleOperation1()
{
}
}// END CLASS DEFINITION Adaptee
Adapter:
public class Adapter : Target
{
private Adaptee adaptee;
public void Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void sampleOperation1()
{
adaptee.sampleOperation1();
}
public void sampleOperation2()
{
}
}// END CLASS DEFINITION Adapter
對象適配器模式的效果:
一個適配器可以把多種不同的源適配到同一個目標。也就是說,同一個適配器可以把源類和它的子類都適配到目標介面。
與類的適配器相比,要想置換源類的方法就不容易。如果一定要置換源類的方法,就只好先做一個源類的子類,將方法置換掉,再把源類的子類當作真正的源進行適配。