<script language="javascript" src="/ad/js/edu_left_300-300.js" type="text/javascript">
</script> |
設計模式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
對象適配器模式的效果:
一個適配器可以把多種不同的源適配到同一個目標。也就是說,同一個適配器可以把源類和它的子類都適配到目標接口。
與類的適配器相比,要想置換源類的方法就不容易。如果一定要置換源類的方法,就只好先做一個源類的子類,將方法置換掉,再把源類的子類當作真正的源進行適配。 |