中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

C#面向?qū)ο笤O(shè)計(jì)模式縱橫談:面向?qū)ο笤O(shè)計(jì)模式與原則

  每一個(gè)模式描述了一個(gè)在我們周?chē)粩嘀貜?fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心

  ——Christopher Alexander

  設(shè)計(jì)模式描述了軟件設(shè)計(jì)過(guò)程中某一類(lèi)常見(jiàn)問(wèn)題的一般性的解決方案。面向?qū)ο笤O(shè)計(jì)模式描述了面向?qū)ο笤O(shè)計(jì)過(guò)程中、特定場(chǎng)景下、類(lèi)與相互通信的對(duì)象之間常見(jiàn)的組織關(guān)系。人是一個(gè)經(jīng)驗(yàn)性的動(dòng)物

  GoF 23種設(shè)計(jì)模式

  歷史性著作《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書(shū)中描述了23種經(jīng)典面向?qū)ο笤O(shè)計(jì)模式,創(chuàng)立了模式在軟件設(shè)計(jì)中的地位。該書(shū)四位作者被人們并成為Gang of Four(GoF),“四人組”,該書(shū)描述的23種經(jīng)典設(shè)計(jì)模式又被人們稱(chēng)為GoF23種設(shè)計(jì)模式。

  由于《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書(shū)確定了設(shè)計(jì)模式的地位,人們通常所說(shuō)的設(shè)計(jì)模式隱含地表示“面向?qū)ο笤O(shè)計(jì)模式”。但這并不意味“設(shè)計(jì)模式”就等于“面向?qū)ο笤O(shè)計(jì)模式”。除了“面向?qū)ο笤O(shè)計(jì)模式”外,還有其他設(shè)計(jì)模式。除了GoF23中設(shè)計(jì)模式外,還有更多的面向?qū)ο笤O(shè)計(jì)模式。

  GoF23種設(shè)計(jì)模式是學(xué)習(xí)面向?qū)ο笤O(shè)計(jì)模式的起點(diǎn),而非終點(diǎn);本課程的目標(biāo)是讓大家在建立在有效方法的基礎(chǔ)上,掌握GoF23種設(shè)計(jì)模式。

  設(shè)計(jì)模式與面向?qū)ο?/strong>

  面向?qū)ο笤O(shè)計(jì)模式解決的是“類(lèi)與相互通信的對(duì)象之間的組織關(guān)系”,包括它們的角色、職責(zé)、協(xié)作方式幾個(gè)方面。面向?qū)ο笤O(shè)計(jì)模式是“好的面向?qū)ο笤O(shè)計(jì)”,所謂“好的面向?qū)ο笤O(shè)計(jì)”是那些可以滿足“應(yīng)對(duì)變化,提高服用”的設(shè)計(jì)。面向?qū)ο笤O(shè)計(jì)模式描述的是軟件設(shè)計(jì),因此它是獨(dú)立于編程語(yǔ)言的,但是面向?qū)ο笤O(shè)計(jì)模式的最終實(shí)現(xiàn)仍然要使用面向?qū)ο缶幊陶Z(yǔ)言來(lái)表達(dá),本課程基于C#語(yǔ)言,但實(shí)際上它適用于支持.NET框架的所有.NET語(yǔ)言,如Visual Basic.NET、C++/CLI等。

面向?qū)ο笤O(shè)計(jì)模式不像算法技巧,可以照搬照用,它是建立在對(duì)“面向?qū)ο?rdquo;純熟、深入的理解的基礎(chǔ)上的經(jīng)驗(yàn)性知識(shí)。掌握面向?qū)ο笤O(shè)計(jì)模式的前提是首先掌握“面向?qū)ο?rdquo;!

  從編程語(yǔ)言直觀了解面向?qū)ο?/strong>

  各種面向?qū)ο缶幊陶Z(yǔ)言相互有別,但都能看到它們對(duì)面向?qū)ο笕髾C(jī)制的支持,即:“封裝、繼承、多態(tài)”

  -封裝,隱藏內(nèi)部實(shí)現(xiàn)

  -繼承,復(fù)用現(xiàn)有代碼

  -多態(tài),改寫(xiě)對(duì)象行為

  使用面向?qū)ο缶幊陶Z(yǔ)言(如C#),可以推動(dòng)程序員以面向?qū)ο蟮乃季S來(lái)思考軟件設(shè)計(jì)結(jié)構(gòu),從而強(qiáng)化面向?qū)ο蟮木幊谭妒健#是一門(mén)支持面向?qū)ο缶幊痰膬?yōu)秀語(yǔ)言,包括:各種級(jí)別的封裝支持;單實(shí)現(xiàn)繼承+多接口實(shí)現(xiàn);抽象方法與虛方法重寫(xiě)。

  但OOPL并非面向?qū)ο蟮娜?/strong>

  通過(guò)面向?qū)ο缶幊陶Z(yǔ)言(OOPL)認(rèn)識(shí)到的面向?qū)ο螅⒉皇敲嫦驅(qū)ο蟮娜浚踔林皇菧\陋的面向?qū)ο蟆OPL的三大機(jī)制“封裝、繼承、多態(tài)”可以表達(dá)面向?qū)ο蟮乃懈拍睿@三大機(jī)制本身并沒(méi)有刻畫(huà)出面向?qū)ο蟮暮诵木瘛Q言之,既可以用這三大機(jī)制做出“好的面向?qū)ο笤O(shè)計(jì)”,也可以用這三大機(jī)制做出“差的面向?qū)ο笤O(shè)計(jì)”。不是使用了面向?qū)ο蟮恼Z(yǔ)言(例如C#),就實(shí)現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)與開(kāi)發(fā)!因此我們不能依賴(lài)編程語(yǔ)言的面向?qū)ο髾C(jī)制,來(lái)掌握面向?qū)ο蟆?/p>

  OOPL沒(méi)有回答面向?qū)ο蟮母拘詥?wèn)題——我們?yōu)槭裁匆褂妹嫦驅(qū)ο螅课覀儜?yīng)該怎樣使用三大機(jī)制來(lái)實(shí)現(xiàn)“好的面向?qū)ο?rdquo;?我們應(yīng)該遵循什么樣的面向?qū)ο笤瓌t?任何一個(gè)嚴(yán)肅的面向?qū)ο蟪绦騿T(例如C#程序員),都需要系統(tǒng)地學(xué)習(xí)面向?qū)ο蟮闹R(shí),單純從編程語(yǔ)言上獲得的面向?qū)ο笾R(shí),不能夠勝任面向?qū)ο笤O(shè)計(jì)與開(kāi)發(fā)。

  從一個(gè)示例談起

image

image

 

image

  重新認(rèn)識(shí)面向?qū)ο?/strong>

  對(duì)于前面的例子,從宏觀層面來(lái)看,面向?qū)ο蟮臉?gòu)建方式更能適應(yīng)軟件的變化,能將變化所帶來(lái)的影響減為最小。從微觀層面來(lái)看,面向?qū)ο蟮姆绞礁鼜?qiáng)調(diào)各個(gè)類(lèi)的“責(zé)任”,新增員工類(lèi)型不會(huì)影響原來(lái)員工類(lèi)型的實(shí)現(xiàn)代碼——這更符合真實(shí)的世界,也更能控制變化所影響的范圍,畢竟Engineer類(lèi)不應(yīng)該為新增的“鐘點(diǎn)工”來(lái)買(mǎi)單……

  對(duì)象是什么?

  -從概念層面講,對(duì)象是某種擁有責(zé)任的抽象。

  -從規(guī)格層面講,對(duì)象是一系列可以被其他對(duì)象使用的公共接口。

  -從語(yǔ)言實(shí)現(xiàn)層面來(lái)看,對(duì)象封裝了代碼和數(shù)據(jù)。

  有了這些認(rèn)識(shí)之后,怎樣才能設(shè)計(jì)“好的面向?qū)ο?rdquo;?

  -遵循一定的面向?qū)ο笤O(shè)計(jì)原則

  -熟悉一些典型的面向?qū)ο笤O(shè)計(jì)模式

  從設(shè)計(jì)原則到設(shè)計(jì)模式

  針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程:客戶(hù)無(wú)需知道所使用對(duì)象的特定類(lèi)型,只需要知道對(duì)象擁有客戶(hù)所期望的接口

  優(yōu)先使用對(duì)象組合,而不是類(lèi)繼承:類(lèi)繼承通常為“白箱復(fù)用”,對(duì)象組合通常為“黑箱復(fù)用”。繼承在某種成都上破壞了封裝性,子類(lèi)父類(lèi)耦合度高;而對(duì)象組合則只要求被組合的對(duì)象具有良好定義的接口,耦合度低。

  封裝變化點(diǎn)

  -使用封裝來(lái)創(chuàng)建對(duì)象之間的分界層,讓設(shè)計(jì)者可以在分界層的一側(cè)進(jìn)行修改,而不會(huì)對(duì)另一側(cè)產(chǎn)生不良的影響,從而實(shí)現(xiàn)層次間的松耦合。使用重構(gòu)得到模式——設(shè)計(jì)模式的應(yīng)用不宜先入為主,一上來(lái)就使用設(shè)計(jì)模式是對(duì)設(shè)計(jì)模式的最大誤用。沒(méi)有一步到位的設(shè)計(jì)模式。敏捷軟件開(kāi)發(fā)實(shí)踐提倡的“Refactoring to Patterns”是目前普遍公認(rèn)的最好的使用設(shè)計(jì)模式的方法。

  幾條更具體的設(shè)計(jì)原則

  單一職責(zé)原則(SRP)

  -一個(gè)類(lèi)應(yīng)該僅有一個(gè)引起它變化的原因。

  開(kāi)放封閉原則(OCP)

  -類(lèi)模塊應(yīng)該是可擴(kuò)展的,但是不可修改(對(duì)擴(kuò)展開(kāi)放,對(duì)更改封閉)

  Liskov替換原則(LSP)

  -子類(lèi)必須能夠替換它們的基類(lèi)

  依賴(lài)倒置原則(DIP)

  -高層模塊不應(yīng)該依賴(lài)于低層模塊,二者都應(yīng)該依賴(lài)于抽象。

  -抽象不應(yīng)該依賴(lài)于實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴(lài)于抽象。

  接口隔離原則(ISP)

  -不應(yīng)該強(qiáng)迫客戶(hù)程序依賴(lài)于它們不用的方法。

  總結(jié)

  設(shè)計(jì)模式描述了軟件設(shè)計(jì)過(guò)程中某一類(lèi)常見(jiàn)問(wèn)題的一般性的解決方案。面向?qū)ο笤O(shè)計(jì)模式描述了面向?qū)ο笤O(shè)計(jì)過(guò)程中、特定場(chǎng)景下、類(lèi)與相互通信的對(duì)象之間常見(jiàn)的組織關(guān)系。深刻理解面向?qū)ο笫菍W(xué)好設(shè)計(jì)模式的基礎(chǔ),掌握一定的面向?qū)ο笤O(shè)計(jì)原則才能把握面向?qū)ο笤O(shè)計(jì)模式的精髓,從而實(shí)現(xiàn)靈活運(yùn)用設(shè)計(jì)模式。

  三大基本面向?qū)ο笤O(shè)計(jì)原則

  -針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程

  -優(yōu)先使用對(duì)象組合,而不是類(lèi)繼承

  -封裝變化點(diǎn)

  使用重構(gòu)得到模式。敏捷軟件開(kāi)發(fā)實(shí)踐提倡的“Refactoring to Patterns”是目前普遍公認(rèn)的最好的使用設(shè)計(jì)模式的方法。

it知識(shí)庫(kù)C#面向?qū)ο笤O(shè)計(jì)模式縱橫談:面向?qū)ο笤O(shè)計(jì)模式與原則,轉(zhuǎn)載需保留來(lái)源!

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

Copyright @ 2011-2018 All Rights Reserved.版權(quán)所有 合作郵箱: zwmobi@qq.com

蘇ICP備18061994號(hào)-3

主站蜘蛛池模板: 成人在线精品视频 | 国产精久久久久久久 | 蜜月aⅴ国产精品 | 国产高清精品一区二区三区 | 伊人网站在线观看 | 天天影视网天天综合色在线播放 | 毛片一区二区三区 | 亚洲www啪成人一区二区 | 国产xxxx搡xxxxx搡麻豆 | 91久久夜色 | 精品国偷自产在线 | 日韩欧美国产一区二区 | 国产电影一区二区 | 国产高清免费在线 | 中文二区| 搞黄网站在线观看 | 五月免费视频 | 福利视频一区二区 | 欧美一区二区三区电影 | 欧美一级在线观看 | 毛片网站在线观看 | 亚洲一区二区三区在线视频 | 久草免费在线视频 | 久久综合亚洲 | 一区二区三区在线免费观看 | 久久国产综合 | 一区二区精品 | 成人亚洲片 | 久久精品亚洲 | 亚洲一区精品在线 | 久久久精品国产 | 天天综合网天天综合 | 国产精品永久免费 | 欧美色999 | 亚洲一区二区在线 | 国产精品久久久久久久一区探花 | 欧美vide | 免费午夜视频在线观看 | 黄色av网站在线免费观看 | 性一交一乱一伦视频免费观看 | 国产精品一区一区 |