用一個介面存放方法:
interface IStack
{
void Push(object item);
void Pop();
object Peek();
}
物件介面轉換器(Adapter與Adaptee組合的關係) ,IStack,是轉換的對象,adaptee被轉換的對象:
public class Adapter : IStack
{
ArrayList adaptee;
public Adapter()
{
adaptee = new ArrayList();
}
public void Push(object item)
{
adaptee.Add(item);
}
public void Pop()
{
adaptee.RemoveAt(adaptee.Count - 1);
}
public object Peek()
{
return adaptee[adaptee.Count - 1];
}
}
介面轉換器的結構呈現:
public class Adapter : ArrayList, IStack
{
public void Push(object item)
{
this.Add(item);
}
public void Pop()
{
this.RemoveAt(this.Count - 1);
}
public object Peek()
{
return this[this.Count - 1];
}
}
Adapter模式的幾個要點:
1.Adapter模式主要應用於希望複用一些現存的類別,但是介面又與複用環境要求不一致的情況。
2.GOF23定義了兩種Adapter模式的實現結構:對象轉換器和類轉換器。物件轉換器採用物件組合的方式,但類轉換器採用多繼承的實現方式。
3.Adapter模式可以實現的非常靈活,不必拘泥於GOF23中定義的兩種結構。
.NET Framewokr中的Adapter應用:
(1)在.Net中複用com對象:
com 物件不符合.net物件的介面
使用tlbimp.exe來創建一個Runtime Callable Wrapper(RCW)以使其符合.net物件的介面。
(2).NET資料訪問類(Adapter變體):
各種資料庫並沒有提供DataSet介面
使用DBDataAdapter可以將任何各資料庫訪問/存取適配到一個DataSet物件上。
(3)集合類別中對現有物件的排序(Adapter變體);
現有物件未實現IComparable介面
實現一個排序轉換器(繼承IComparer介面),然後在其Compare方法中對兩個物件進行比較。
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言