|
一、上篇回顧
通過上篇的簡(jiǎn)單講解,我們知道了,組合模式意圖是通過整體與局部之間的關(guān)系,通過樹形結(jié)構(gòu)的形式進(jìn)行組織復(fù)雜對(duì)象,屏蔽對(duì)象內(nèi)部的細(xì)節(jié),對(duì)外展現(xiàn)統(tǒng)一的方式來操作對(duì)象,是我們處理更復(fù)雜對(duì)象的一個(gè)手段和方式。本文以查詢控件為例,說明了,查詢控件內(nèi)部的組成元素,及如何操作內(nèi)部的組成元素,包括添加元素,刪除和處理相應(yīng)事件的Handler,當(dāng)然組合模式的作用遠(yuǎn)比這些強(qiáng)大,后面我們肯定會(huì)在一些實(shí)例代碼中運(yùn)用到組合模式的。組合模式如果在條件允許的情況下,我們盡量使用組合模式來處理復(fù)雜對(duì)象,遠(yuǎn)比通過繼承出來的對(duì)象來的有效。
組合模式-強(qiáng)調(diào)的是如何組織整體和局部之間的結(jié)構(gòu),將整體和局部之間的關(guān)系,通過樹形這樣的結(jié)構(gòu)來組織這種對(duì)象組合的結(jié)構(gòu)關(guān)系。
組合模式的適用場(chǎng)景:
1、我們期望操作一個(gè)復(fù)雜對(duì)象和操作一個(gè)組成這個(gè)復(fù)雜對(duì)象內(nèi)部的簡(jiǎn)單對(duì)象一樣操作的時(shí)候,我們可以考慮對(duì)象組合。
2、當(dāng)一個(gè)對(duì)象由多個(gè)簡(jiǎn)單對(duì)象組成,并且它又可能是其他對(duì)象的一個(gè)組成部分,這種情況下,組合模式是比較好的選擇。
二、摘要
本篇將會(huì)講述結(jié)構(gòu)型模式中的經(jīng)典模式-適配器模式,也是項(xiàng)目中經(jīng)常使用的模式之一,我們現(xiàn)在開發(fā)一個(gè)系統(tǒng)的時(shí)候,也許會(huì)遇到各式各樣的要求,我們要求和現(xiàn)有的系統(tǒng)進(jìn)行集成,或者是我們直接開發(fā)一個(gè)系統(tǒng),或者是我們修改已有的系統(tǒng)達(dá)到滿足現(xiàn)有需求的要求。因此一般來說,每種情況,我們都有自己的應(yīng)對(duì)方案。我們來看看項(xiàng)目中的幾種可能情況:
通過上面的幾種情況,我們知道,開發(fā)一個(gè)新系統(tǒng)吧,成本和時(shí)間的投入較高,如果說我們舊系統(tǒng)目前運(yùn)行的非常穩(wěn)定,并且投入的成本非常高,我們既想繼續(xù)使用舊系統(tǒng)的功能,又想滿足新系統(tǒng)的需求,這個(gè)時(shí)候,我們?cè)趺醋瞿兀靠赡鼙容^好的方式就是把舊系統(tǒng)通過適配器來轉(zhuǎn)換成新接口的調(diào)用形式,完成適配服務(wù)。當(dāng)然本文也是主要針對(duì)這個(gè)思路,展開去講述適配器模式的一些用法,當(dāng)然我這里可能講解了適配器模式的一些普遍用法,還有一些比較特殊的用法,需要大家多多指出,向大伙學(xué)習(xí)了。
本文主要講述下面的幾個(gè)部分的內(nèi)容:
1、適配器模式的使用場(chǎng)景。
2、適配器模式的經(jīng)典實(shí)現(xiàn)。
3、多適配器的封裝。
4、其他情況的考慮。
三、本文大綱
a、上篇回顧。
b、摘要。
c、本文大綱。
d、適配器模式的特點(diǎn)及使用場(chǎng)景。
e、適配器模式的經(jīng)典實(shí)現(xiàn)。
f、適配器模式的其他方案。
g、適配器模式使用總結(jié)。
四、適配器模式的特點(diǎn)及使用場(chǎng)景
4.1、適配器模式的特點(diǎn)
適配器模式主要解決的問題就是我們要調(diào)用的接口類型,無法滿足我們新系統(tǒng)的使用需求,這時(shí)候,我們需要將舊系統(tǒng)的接口,通過適配器進(jìn)行轉(zhuǎn)配,達(dá)到支持新接口調(diào)用的目的。對(duì)于這樣的要求,我們通過適配器就可以完成,當(dāng)然如果有多個(gè)接口需要轉(zhuǎn)配,那么我們就需要為每一個(gè)接口提供一個(gè)適配器去完成轉(zhuǎn)換的工作。當(dāng)然具體的調(diào)用過程,我們可以進(jìn)行相應(yīng)的封裝。達(dá)到比較通用的方式去調(diào)用適配器,完成適配服務(wù)。我們來看看適配的過程。 上圖基本給出了適配器的基本轉(zhuǎn)換的過程。
4.2、適配器模式的場(chǎng)景
我們根據(jù)上面的適配器的特點(diǎn)的介紹中,我們來分析下適配器模式的幾類比較適用的使用場(chǎng)景:
1、我們?cè)谑褂玫谌降念悗欤蛘哒f第三方的API的時(shí)候,我們通過適配器轉(zhuǎn)換來滿足現(xiàn)有系統(tǒng)的使用需求。
2、我們的舊系統(tǒng)與新系統(tǒng)進(jìn)行集成的時(shí)候,我們發(fā)現(xiàn)舊系統(tǒng)的數(shù)據(jù)無法滿足新系統(tǒng)的需求,那么這個(gè)時(shí)候,我們可能需要適配器,完成調(diào)用需求。
3、我們?cè)谑褂貌煌瑪?shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步。(我這里只是分析的是通過程序來說實(shí)現(xiàn)的時(shí)候的情況。還有其他的很多種方式[數(shù)據(jù)庫同步])。
五、適配器模式的經(jīng)典實(shí)現(xiàn)
我們本節(jié)給出適配器模式的經(jīng)典實(shí)現(xiàn)代碼,我們這里結(jié)合項(xiàng)目中的查詢服務(wù)來進(jìn)行說明,舊系統(tǒng)中提供一個(gè)查詢服務(wù)方法Query();但是我新系統(tǒng)定義底層的數(shù)據(jù)訪問服務(wù)層的時(shí)候,卻是使用的GetList()方法,并且將之前的返回結(jié)果集合進(jìn)行包裝成泛型的形式來進(jìn)行。我們這里給出相關(guān)的示例代碼,大家就能清楚這個(gè)使用過程了,當(dāng)然我們這里給出類適配器和對(duì)象適配器2種實(shí)現(xiàn)的方式,通過不同的實(shí)現(xiàn)思路,我們最后總結(jié)下,這2種形式的優(yōu)缺點(diǎn):
1、類適配器
針對(duì)上面描述的接口的轉(zhuǎn)配過程,我們給出示例代碼:
舊系統(tǒng)的查詢服務(wù):
public class Query :IQuery
{
public object Query()
{
return new object();
}
}
新系統(tǒng)的查詢服務(wù)接口:
public interface ISelect
{
object GetList();
}
通過類適配器完成轉(zhuǎn)配操作:
public class QueryAdapter : Query, ISelect
{
public object GetList()
{
return base.Query();
}
}
具體的調(diào)用測(cè)試代碼如下:
class Program
{
static void Main(string[] args)
{
ISelect adapter = new QueryAdapter();
object o= adapter.GetList();
System.Threading.Thread.Sleep(10000);
}
}
it知識(shí)庫:系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—適配器模式,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。