天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—組合模式

  一、上篇回顧

      我們上篇主要講述了結(jié)構(gòu)型模式中的外觀模式,外觀模式作為結(jié)構(gòu)型模式中的一個(gè)簡單又實(shí)用的模式,外觀模式通過封裝細(xì)節(jié)來提供大粒度的調(diào)用,直接的好處就是,封裝細(xì)節(jié),提供了應(yīng)用寫程序的可維護(hù)性和易用性。外觀模式一般應(yīng)用在系統(tǒng)架構(gòu)的服務(wù)層中,當(dāng)我們是多個(gè)不同類型的客戶端應(yīng)用程序時(shí),比如一個(gè)系統(tǒng)既可以在通過Web的形式訪問,也可以通過客戶端應(yīng)用程序的形式時(shí),可能通過外觀模式來提供遠(yuǎn)程服務(wù),讓應(yīng)用程序進(jìn)行遠(yuǎn)程調(diào)用,這樣通過外觀形式提供服務(wù),那么不管是什么樣的客戶端都訪問一致的外觀服務(wù),那么以后就算是我們的應(yīng)用服務(wù)發(fā)生變化,那么我們不需要修改沒一個(gè)客戶端應(yīng)用的調(diào)用,只需要修改相應(yīng)的外觀應(yīng)用即可。

  我們主要是講述了以下的幾種情況,使用外觀模式可能更適合:

  1、我們在使用第三方類庫或者API的時(shí)候,我們通過本地的API接口的封裝,來完成對第三方API接口的粗粒度外觀對象,通過這個(gè)外觀對象可以很容易的完成服務(wù)的調(diào)用。

  2、我們在架構(gòu)設(shè)計(jì)的過程中,一次的功能訪問可能需要同時(shí)的調(diào)用很多個(gè)對象,那么如果我們在服務(wù)調(diào)用的時(shí)候,能夠在應(yīng)用程序調(diào)用中一次就能完成所有要同時(shí)調(diào)用的對象那該多好啊,外觀模式無疑是最好的原則,特別是在分布式應(yīng)用中,通過遠(yuǎn)程調(diào)用服務(wù),通過外觀模式降低應(yīng)用程序與服務(wù)的交互次數(shù),同時(shí)可以降低應(yīng)用程序的復(fù)雜性。

  二、摘要

  本文將會(huì)講述結(jié)構(gòu)性模式中的另外一個(gè)常用的模式-組合模式,我們平時(shí)在面向?qū)ο蟮脑O(shè)計(jì)中,我想有一個(gè)原則經(jīng)常被提及就是,我們在設(shè)計(jì)的時(shí)候,對象組合>類的繼承,本篇將會(huì)將結(jié)合簡單的實(shí)例來說明這方面的優(yōu)勢,并且完成對組合模式的主題思想的掌握。我們這樣來簡單的理解組合模式,組合模式就是把一些現(xiàn)有的對象或者元素,經(jīng)過組合后組成新的對象,新的對象提供內(nèi)部方法,可以讓我們很方便的完成這些元素或者內(nèi)部對象的訪問和操作。我們也可以把組合對象理解成一個(gè)容器,容器提供各種訪問其內(nèi)部對象或者元素的API,我們只需要使用這些方法就可以操作它了。那么對象組合相比繼承的優(yōu)勢有哪些呢?可能具體的優(yōu)勢,也不是一句二句就能表述清楚的,還是我們來看看圖形的可視化的描述吧。

clip_image002  我們這里設(shè)計(jì)的是持久化服務(wù)寫到一個(gè)基類中,然后繼承自該基類的子類都會(huì)擁有內(nèi)置的持久化方法,可能后續(xù)我們又要添加其他的針對某個(gè)具體的對象類,有一些個(gè)性化的服務(wù),我們通過擴(kuò)展這個(gè)類,進(jìn)行繼承,這樣多重繼承后,會(huì)有一個(gè)很大的問題。子類膨脹的問題,而且一般來說繼承的重?cái)?shù)達(dá)到5層左右的時(shí)候,性能上可能就會(huì)有一定的瓶頸。也不是好的設(shè)計(jì)的思路。這時(shí)候?qū)ο蠼M合可能為我們提供了更好的解決方案。基于組合方式的話,可能我們可以這樣來做,換個(gè)思路:就像我們的一個(gè)負(fù)責(zé)的對象,可以通過簡單的對象來組成的道理差不多,其實(shí)。

clip_image004  通過上圖,我們知道了,組合對象可以看作是一系列簡單的對象組合成負(fù)責(zé)的對象的一個(gè)模式,復(fù)雜對象可以看作是簡單對象的一個(gè)容器。這個(gè)復(fù)雜對象完成了簡單對象的封裝,通過這個(gè)容器完成對象內(nèi)部簡單對象的訪問。

  三、本文大綱

       a、上篇回顧。

       b、摘要。

       c、本文大綱。

       d、組合模式的特點(diǎn)及使用場景。

       e、組合模式的經(jīng)典實(shí)現(xiàn)。

       f、組合模式的其他方案。

       g、原型模式使用總結(jié)。

  四、組合模式的特點(diǎn)及使用場景

  組合模式是將一系列對象組合成樹形結(jié)構(gòu)用來表示整體和部分之間的關(guān)系,組合模式的主要目的是達(dá)到,訪問組合對象和訪問單個(gè)對象具有一致性。這里的組合對象比較特殊,本身他可以是由其他的對象組合而成,同時(shí),這個(gè)組合對象又可以是組成更復(fù)雜對象的一個(gè)部分。我們來舉個(gè)例子來說明吧,可能更直觀。

clip_image006  這里我們可以理解為一個(gè)簡單的查詢組件可能有要滿足上述的幾類查詢條件的輸入類型,將這個(gè)組件作為一個(gè)容器,那么同事,這個(gè)容器又可以作為另外一個(gè)容器的組件來運(yùn)行,那么我們又可以在分頁控件中,將這個(gè)查詢組件包含到其中。以為分頁提供相應(yīng)的查詢元素的集成。

  我們一般在如下場景中使用組合模式比較方便:

  1、我們有的時(shí)候想用戶使用一個(gè)復(fù)雜對象像使用簡單對象一樣的方式去訪問,并且用戶同意使用對象內(nèi)部的所有的對象時(shí),我們可以考慮使用該模式。這個(gè)怎么理解呢?我們使用復(fù)雜對象像使用簡單對象一樣的方式去訪問的話,那么我們可以使用組合對象,我們把這些簡單的對象進(jìn)行組合,用組合對象進(jìn)行包裝,并且提供相應(yīng)的操作組合對象內(nèi)部的方法。結(jié)合上圖中的例子,我們可以這樣理解,我們把查詢組件封裝成一個(gè)用戶控件,然后可以在其他的頁面中進(jìn)行調(diào)用。這個(gè)時(shí)候,我們可能考慮如何分部頁面,如何能夠動(dòng)態(tài)的維護(hù)界面上的控件,是否顯示,控件里面顯示的文本和值是什么?等等,這些都是我們可以考慮的元素,那么我們?nèi)绾蝸碜瞿兀刻峁┫旅娴膸讉€(gè)方法。我還是給出圖來說話吧:

clip_image008  包含上面的這些元素,那么我們可以通過一些相應(yīng)的方法來進(jìn)行訪問內(nèi)部的元素。我們給出簡單的示例代碼:

public QueryControl()
{
InitializeComponent();

this.InitControlList();
}

public event EventHandler handler;

private Dictionary<string,Control> _controlList = null;
/// <summary>
/// 初始化控件信息
/// </summary>
private void InitControlList()
{
this._controlList = new Dictionary<string,Control>();
}
/// <summary>
/// 返回界面控件中所有的查詢條件控件列表
/// </summary>
/// <returns></returns>
public Dictionary<string,Control> GetControls()
{
return this._controlList;
}

/// <summary>
/// 添加查詢控件到界面中
/// </summary>
/// <param name="control"></param>
/// <returns></returns>
public bool AddControl(string key,Control control)
{
if(this._controlList.ContainsKey(key))
return false;
this._controlList.Add(key,control);

return true;
}

/// <summary>
/// 移除指定鍵值的對象
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool RemoveControl(string key)
{
if (this._controlList.ContainsKey(key))
return false;
this._controlList.Remove(key);

return true;
}

public virtual void OnQuery()
{
if (this.handler != null)
handler(
this, new EventArgs());
}

public void Query(object sender, EventArgs e)
{
this.CreateSQL();
this.OnQuery();
}

/// <summary>
/// 根據(jù)選中的條件生成SQL語句
/// </summary>
private void CreateSQL()
{
throw new NotImplementedException();
}

it知識(shí)庫系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—組合模式,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成+人欧美+综合在线观看 | 亚洲色 图 | 久久一本岛在免费线观看2020 | 全彩无翼污之邪恶女教师 | 耻辱诊察室1一4集动漫在线观看 | 黄色三级在线 | 国产亚洲精品线视频在线 | 亚洲精品国产高清不卡在线 | 久久精品123 | 男男h开荤粗肉h文1v1 | 青青草国产自偷拍 | 哺乳溢出羽月希中文字幕 | 亚洲国产精品无码AV久久久 | 青青伊人国产 | 久久成人免费观看草草影院 | 熟女理发厅 | 羞羞漫画视频 | 色欲精品国产AV久久久 | 亚洲中文字幕AV在天堂 | 啊灬啊别停灬用力啊在线观看视频 | 成人久久欧美日韩一区二区三区 | 亚洲 无码 制服 日韩 | 2020最新无码国产在线视频 | 国产成人在线小视频 | 视频区 国产 欧美 日韩 | 国产传媒在线观看 | 久久人人爽人人片AV人成 | 99精品国产福利在线观看 | 暖暖 视频 免费 高清 在线观看 | 男人吃奶摸下弄进去好爽 | 伦理片飘花手机在线 | 小货SAO边洗澡边CAO你动漫 | SM高H黄暴NP辣H调教性奴 | 丁香成人网址 | rio 快播 | a毛片基地免费全部视频 | 亚洲精品久久久午夜麻豆 | 色欲AV亚洲午夜精品无码 | 色欲AV蜜臀AV在线观看麻豆 | 久久三级视频 | 成人免费看片45分钟 |