Android設(shè)計(jì)模式---第二課 組件協(xié)作模式

Template Method 模版方法

重構(gòu)關(guān)鍵技法

  • 靜態(tài)動態(tài)
  • 早綁定晚綁定
  • 繼承組合
  • 編譯時(shí)依賴運(yùn)行時(shí)依賴
  • 緊耦合松耦合

“組件協(xié)作”模式

現(xiàn)代軟件專業(yè)分工之后的第一個結(jié)果是“框架與應(yīng)用程序的劃分”,“組件協(xié)作”模式通過晚綁定分蓖,來實(shí)現(xiàn)框架與應(yīng)用程序之間的松耦合典挑,是二者之間協(xié)作時(shí)常用的模式动知。

  • 典型模式
    Template Method
    Strategy
    Observer/Event

Template Method

動機(jī)
  • 在軟件構(gòu)建過程中,對于某一項(xiàng)任務(wù)竿刁,它常常有穩(wěn)定的整體操作結(jié)構(gòu)定躏,但各個子步驟卻有很多改變的需求合武,或者由于固有的原因(比如框架與應(yīng)用之間的關(guān)系)而無法和任務(wù)的整體結(jié)構(gòu)同時(shí)實(shí)現(xiàn)跃脊。

  • 例子1:銀行業(yè)務(wù)辦理流程在銀行辦理業(yè)務(wù)時(shí)淮野,一般都包含幾個基本固定步驟:取號排隊(duì)->辦理具體業(yè)務(wù)->對銀行工作人員進(jìn)行評分捧书。取號取號排隊(duì)和對銀行工作人員進(jìn)行評分業(yè)務(wù)邏輯是一樣的吹泡。但是辦理具體業(yè)務(wù)是個不相同的,具體業(yè)務(wù)可能取款经瓷、存款或者轉(zhuǎn)賬爆哑。

  • 如何在確定穩(wěn)定操作結(jié)構(gòu)的前提下,來靈活應(yīng)對各個子步驟的變化或者晚期實(shí)現(xiàn)需求了嚎?

軟件設(shè)計(jì)流程
  • 結(jié)構(gòu)化


  • 面向?qū)ο?/li>
早綁定與晚綁定
模式定義

定義一個操作中的算法的骨架(穩(wěn)定)泪漂,而將一些步驟(變化)延遲到子類中。 T模板方法使得子類可以不改變(復(fù)用)一個算法的結(jié)構(gòu)即可重定義(override重寫)該算法的某些特定步驟歪泳。
解決方法:

  • 1)模板方法模式是基于繼承的代碼復(fù)用基本技術(shù)萝勤,模板方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計(jì)的核心之一。在模板方法模式中呐伞,可以將相同的代碼放在父類中敌卓,而將不同的方法實(shí)現(xiàn)放在不同的子類中。
  • 2)在模板方法模式中伶氢,我們需要準(zhǔn)備一個抽象類趟径,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實(shí)現(xiàn),然后聲明一些抽象方法來讓子類實(shí)現(xiàn)剩余的邏輯癣防。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法蜗巧,從而對剩余的邏輯有不同的實(shí)現(xiàn),這就是模板方法模式的用意蕾盯。模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想幕屹,是一種使用頻率較高的模式。
結(jié)構(gòu)
要點(diǎn)總結(jié)
  • T模式是一種非臣对猓基礎(chǔ)性的設(shè)計(jì)模式望拖,在面向?qū)ο笙到y(tǒng)中有著大量的應(yīng)用。它用最簡潔的機(jī)制(虛函數(shù)的多態(tài)性)為很多應(yīng)用程序框架提供了靈活的擴(kuò)展點(diǎn)挫鸽,是代碼復(fù)用方面的基本實(shí)現(xiàn)結(jié)構(gòu)说敏。
  • 除了可以靈活應(yīng)對子步驟的變化外,“不要調(diào)用我丢郊,讓我來調(diào)用你”的反向控制結(jié)構(gòu)是T模式的典型應(yīng)用盔沫。
  • 在具體實(shí)現(xiàn)方面,被T模式調(diào)用的虛方法可以具有實(shí)現(xiàn)枫匾,也可以沒有任何實(shí)現(xiàn)(抽象方法迅诬、純虛方法),但一般推薦將它們設(shè)置prtected方法

策略模式(選擇上的變化)

動機(jī)
  • 在軟件開發(fā)中也常常遇到類似的情況婿牍,實(shí)現(xiàn)某一個功能有多種算法或者策略,如果將這些算法都編碼到對象中惩歉,將會使對象變得異常復(fù)雜等脂;而且有些時(shí)候支持不使用的算法也是一個性能負(fù)擔(dān)
  • 如何在運(yùn)行時(shí)根據(jù)需要需要透明地更改對象的算法俏蛮?將算法與對象本身解耦,從而避免上述問題上遥?
模式定義(枚舉類型搏屑,switch等)

定義一系列的算法,把每一個算法封裝起來, 并且使它們可相互替換(變化)。本模式使得算法可獨(dú)立于使用它的客戶程序(穩(wěn)定)而變化(擴(kuò)展粉楚,子類化)辣恋。

適用性

當(dāng)存在以下情況時(shí)使用Strategy模式

  • 許多相關(guān)的類僅僅是行為有異。 “策略”提供了一種用多個行為中的一個行為來配置一個類的方法模软。即一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種伟骨。
  • 需要使用一個算法的不同變體。例如燃异,你可能會定義一些反映不同的空間 /時(shí)間權(quán)衡的算法携狭。當(dāng)這些變體實(shí)現(xiàn)為一個算法的類層次時(shí) ,可以使用策略模式。
  • 算法使用客戶不應(yīng)該知道的數(shù)據(jù)回俐」渫龋可使用策略模式以避免暴露復(fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)仅颇。
  • 一個類定義了多種行為 , 并且這些行為在這個類的操作中以多個條件語句的形式出現(xiàn)单默。將相關(guān)的條件分支移入它們各自的Strategy類中以代替這些條件語句。
結(jié)構(gòu)
Paste_Image.png
模式的組成
  • 環(huán)境類(Context):用一個ConcreteStrategy對象來配置忘瓦。維護(hù)一個對Strategy對象的引用搁廓。可定義一個接口來讓Strategy訪問它的數(shù)據(jù)政冻。
  • 抽象策略類(Strategy):定義所有支持的算法的公共接口枚抵。 Context使用這個接口來調(diào)用某ConcreteStrategy定義的算法。
  • 具體策略類(ConcreteStrategy):以Strategy接口實(shí)現(xiàn)某具體算法
要點(diǎn)總結(jié)
  • Strategy及其子類為組件提供了一系列可重用的算法明场,從而可以使得類型在運(yùn)行時(shí)方便地根據(jù)需要在各個算法之間進(jìn)行切換汽摹。
  • Strategy模式提供了用條件判斷語句以外 的另一種選擇,消除條件判斷語句,就是在解耦合苦锨。含有許多條件判斷語句的代碼通常都需要Strategy模式逼泣。
  • 如果Strategy對象沒有實(shí)例變量,那么各個上下文可以共享同一個Strategy對象舟舒,從而節(jié)省對象開銷拉庶。

5.觀察者模式

textwatch 如何實(shí)現(xiàn)
不會耦合具體的觀察者
觀察者自己來決定是否需要訂閱通知,目標(biāo)對象對此一無所知

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秃励,一起剝皮案震驚了整個濱河市氏仗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夺鲜,老刑警劉巖皆尔,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐舔,死亡現(xiàn)場離奇詭異,居然都是意外死亡慷蠕,警方通過查閱死者的電腦和手機(jī)珊拼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來流炕,“玉大人澎现,你說我怎么就攤上這事∶勘伲” “怎么了剑辫?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長影兽。 經(jīng)常有香客問我揭斧,道長,這世上最難降的妖魔是什么峻堰? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任讹开,我火速辦了婚禮,結(jié)果婚禮上捐名,老公的妹妹穿的比我還像新娘旦万。我一直安慰自己,他們只是感情好镶蹋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布成艘。 她就那樣靜靜地躺著,像睡著了一般贺归。 火紅的嫁衣襯著肌膚如雪淆两。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天拂酣,我揣著相機(jī)與錄音秋冰,去河邊找鬼。 笑死婶熬,一個胖子當(dāng)著我的面吹牛剑勾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赵颅,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虽另,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饺谬?” 一聲冷哼從身側(cè)響起捂刺,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叠萍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芝发,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年苛谷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格郁。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腹殿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出例书,到底是詐尸還是另有隱情锣尉,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布决采,位于F島的核電站自沧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏树瞭。R本人自食惡果不足惜拇厢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晒喷。 院中可真熱鬧孝偎,春花似錦、人聲如沸凉敲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爷抓。三九已至势决,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蓝撇,已是汗流浹背果复。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唉地,地道東北人据悔。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像耘沼,于是被迫代替她去往敵國和親极颓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一群嗤、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用菠隆、多...
    MinoyJet閱讀 3,947評論 1 15
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP),是說軟件實(shí)體(類、模塊骇径、函數(shù)等等)應(yīng)該可以拓展躯肌,但是不可修改。開-閉原...
    西山薄涼閱讀 3,798評論 3 14
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品破衔,去做同樣的事情清女,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,761評論 2 17
  • 1 場景問題# 1.1 報(bào)價(jià)管理## 向客戶報(bào)價(jià)晰筛,對于銷售部門的人來講嫡丙,這是一個非常重大、非常復(fù)雜的問題读第,對不同的...
    七寸知架構(gòu)閱讀 5,080評論 9 62
  • Iterator模式 (迭代器) 一個一個遍歷 一個集合類可以遵守 Iterator 協(xié)議曙博,并實(shí)現(xiàn)一個 Itera...
    SSBun閱讀 1,843評論 0 15