設(shè)計模式補(bǔ)完計劃

目錄

1.uml類圖
2.uml時序圖
3.設(shè)計模式

uml類圖

  1. 泛化關(guān)系(繼承):指類繼承自類闰挡,接口繼承自接口的關(guān)系,用extend關(guān)鍵字


    1.泛化關(guān)系
    1.泛化關(guān)系
  2. 實現(xiàn)關(guān)系:指類繼承自接口择卦,用implement關(guān)鍵字


    2. 實現(xiàn)關(guān)系
    2. 實現(xiàn)關(guān)系
  3. 聚合關(guān)系,表示B由A組成,整體和部分不是強(qiáng)依賴關(guān)系,整體不存在瓤狐,部分也存在拓轻。比如大雁和雁群


    3. 聚合關(guān)系
    3. 聚合關(guān)系
  4. 組合關(guān)系斯撮,表示B由A組成,整體不存在了,部分也不存在扶叉,用實心菱形表示勿锅。B類和A類的生命周期相同。比如大雁和翅膀枣氧。
  5. 關(guān)聯(lián)關(guān)系:實線箭頭溢十。表示強(qiáng)關(guān)聯(lián)關(guān)系,一般是B類中存在屬性類A
  6. 依賴關(guān)系:虛線箭頭达吞,表示一個對象運(yùn)行期間會用到另一個對象的關(guān)系张弛。一般是B類中method的參數(shù)用到A類

uml時序圖

動態(tài)圖包括【交互圖】【活動圖】【狀態(tài)圖】
其中交互圖又包括【時序圖】【協(xié)作圖】

時序圖組成

對象Object

對象

矩形將對象包裹起來,名稱下有下劃線酪劫。
對象創(chuàng)建時機(jī):

  • 處于頂端:說明交互時對象已經(jīng)存在
  • 不在頂部:說明對象在交互過程中創(chuàng)建

生命線Lifeline

生命線

虛線吞鸭,表示對象的存在,長度取決于交互時間契耿。

激活A(yù)ctivation

激活

表示對象執(zhí)行一項操作的時期瞒大,這個時候?qū)ο蟊徽加靡酝瓿赡稠椚蝿?wù)。

  • 去激活:表示對象處于【空閑狀態(tài)】搪桂。對象的去激活是在激活條的底部透敌,通常發(fā)生在一個消息離開對象生命線。
  • 激活:生命線變?yōu)榫匦翁咝担@個矩形就是激活條酗电。對象激活是在激活條的頂部。

消息

時序圖和協(xié)作圖中消息的區(qū)別:時序圖強(qiáng)調(diào)消息的順序内列,協(xié)作圖強(qiáng)調(diào)交換消息的對象間的關(guān)系撵术。
消息類型:


異步消息;發(fā)送者發(fā)送消息后话瞧,繼續(xù)自己的活動嫩与,異步消息的發(fā)送者和接受者是并發(fā)工作的

同步消息=調(diào)用消息寝姿;發(fā)送者發(fā)送后停止活動,等待消息接受者放棄或者返回控制

過程調(diào)用中返回的消息;

繪制反身消息;又叫自關(guān)聯(lián)消息划滋,表示方法自身調(diào)用以及一個對象內(nèi)的方法調(diào)用了另外一個方法

設(shè)計模式

設(shè)計模式一般分為三種: 創(chuàng)建型模式饵筑,結(jié)構(gòu)型模式,行為型模式

創(chuàng)建型模式

包含模式

simple Factory Pattern 又叫靜態(tài)工廠模式(static Factory Method)
缺點(diǎn):
一旦添加新產(chǎn)品处坪,就要修改工廠邏輯根资,可能造成工廠邏輯復(fù)雜,不利于系統(tǒng)的擴(kuò)展和維護(hù)
優(yōu)點(diǎn):
傳一個參數(shù)同窘,就能獲得需要的產(chǎn)品/對象玄帕,適用于工廠類負(fù)責(zé)創(chuàng)建的對象比較少;客戶端只知道傳入工廠類的參數(shù)想邦,不關(guān)心如何創(chuàng)建

也叫虛擬構(gòu)造器(Virtual Constructor)模式或者多態(tài)工廠(Polymorphic Factory)模式
在這里裤纹,核心的共產(chǎn)類不再負(fù)責(zé)所欲產(chǎn)品的創(chuàng)建,而是將具體的工作交給子類去做案狠,核心類僅僅負(fù)責(zé)定義具體工廠類必須實現(xiàn)的接口服傍。使得工廠方法模式可在系統(tǒng)不修改工廠角色的情況下引進(jìn)新產(chǎn)品。
可以理解為在簡單工廠方法的基礎(chǔ)上骂铁,對工廠也做了抽象吹零,然后使用面向?qū)ο蟮亩鄳B(tài)性,動態(tài)生成工廠拉庵。

  • 抽象工廠模式(Abstract Factory)
    重要程度:5

與工廠方法模式最大的區(qū)別在于灿椅,我又被強(qiáng)化了。工廠方法針對的是一個產(chǎn)品登記結(jié)構(gòu)钞支,而抽象工廠模式則需要面對多個產(chǎn)品等級結(jié)構(gòu)茫蛹。
新增工廠和產(chǎn)片容易,但是新增產(chǎn)品等級結(jié)構(gòu)麻煩烁挟。
如很多系統(tǒng)軟件需要更改主題婴洼,界面的按鈕。文本框撼嗓。背景色等一起發(fā)生變化時柬采,可以使用抽象工廠模式進(jìn)行設(shè)計。

開閉原則:
要求系統(tǒng)對擴(kuò)展開放且警,對修改封閉粉捻。
工廠模式的退化

  • 當(dāng)抽象工廠模式中每一個具體工廠類只創(chuàng)建一個產(chǎn)品對象,也就是只存在一個產(chǎn)品等級結(jié)構(gòu)時斑芜,抽象工廠模式退化成工廠方法模式肩刃;
  • 當(dāng)工廠方法模式中抽象工廠與具體工廠合并,提供一個統(tǒng)一的工廠來創(chuàng)建產(chǎn)品對象,并將創(chuàng)建對象的工廠方法設(shè)計為靜態(tài)方法時盈包,工廠方法模式退化成簡單工廠模式沸呐。
  • 建造者模式(Builder)
    重要程度:2

Android中經(jīng)常使用的builder模式,解決了成員屬性初始化的一系列問題续语,比如判斷啦垂谢,賦值先后順序啦厦画,在創(chuàng)建者模式里完全內(nèi)部實現(xiàn)疮茄,不用暴露給對象用戶。用戶無需關(guān)心屬性的組裝方式根暑。

  • 原型模式(Prototype)
    重要程度:3

JavaScript使用的這種模式力试,來實現(xiàn)類的繼承和擴(kuò)展。
其特點(diǎn)在于:復(fù)制一個已經(jīng)存在的實例來返回新的實例排嫌,而不是新建實例畸裳。被復(fù)制的實例就是我們所叫的“原型”。
原型模式多用于創(chuàng)建復(fù)雜的或者耗時的實例淳地,因為這種情況下怖糊,復(fù)制一個已經(jīng)存在的實例使程序運(yùn)行更高效;或者創(chuàng)建值相等颇象,只是命名不一樣的同類數(shù)據(jù)伍伤。

優(yōu)點(diǎn):加速并簡化對象的創(chuàng)建,比如在一個循環(huán)內(nèi)創(chuàng)建對象遣钳,使用原型模式最好扰魂。
注意:
1.原型模式復(fù)制對象不會調(diào)用類的構(gòu)造方法。它直接在內(nèi)存中復(fù)制數(shù)據(jù)蕴茴。
2.Object的clone是淺拷貝劝评,只會拷貝對象中的基礎(chǔ)數(shù)據(jù)類型,對于數(shù)組·容器對象 ·引用對象都不會拷貝倦淀。

  • 單例模式(Singleton)
    重要程度:4

結(jié)構(gòu)型模式

包含模式

  • 適配器模式(Adapter)
    重要程度:4

Android界面開發(fā)大量使用的模式蒋畜,適配器的實現(xiàn)是把客戶類的請求轉(zhuǎn)換為對適配者的相應(yīng)接口的調(diào)用。
適配器模式:將一個接口轉(zhuǎn)換成客戶希望的另一個接口撞叽,適配器模式使接口不兼容的那些類可以一起工作姻成。其別名為包裝器(Wrapper)。適配器可以作為類結(jié)構(gòu)模型能扒,也可以作為對象結(jié)構(gòu)模型佣渴。
適用環(huán)境:系統(tǒng)需要使用現(xiàn)有類,而現(xiàn)有類不符合系統(tǒng)的需要初斑。

  • 橋接模式(Bridge)
    重要程度:3

  • 組合模式(Composite)
    重要程度:4

  • 裝飾模式(Decorator)
    重要程度:3

將一個類的對象嵌入另一個對象中辛润,由另一個對象來決定是否調(diào)用嵌入對象的行為以便擴(kuò)展自己的行為,我們稱這個嵌入的對象為裝飾器(Decorator).裝飾模式可以在不需要創(chuàng)造更多子類的情況下,將對象的功能加以擴(kuò)展砂竖。這就是裝飾模式的模式動機(jī)真椿。

  • 外觀模式(Facade)
    重要程度:5

  • 享元模式(Flyweight)
    重要程度:1

  • 代理模式(Proxy)
    重要程度:4

通過引入代理對象來間接訪問一 個對象,這就是代理模式的模式動機(jī)乎澄。給某一個對象提供一個代 理突硝,并由代理對象控制對原對象的引用。代理模式的英 文叫做Proxy或Surrogate置济,它是一種對象結(jié)構(gòu)型模式
幾種常用的代理模式
圖片代理解恰;遠(yuǎn)程代理;虛擬代理

行為型模式

行為型模式(Behavioral Pattern)是對在不同的對象之間劃分責(zé)任和算法的抽象化浙于。
行為型模式不僅關(guān)注類和對象的結(jié)構(gòu)护盈,而且重點(diǎn)關(guān)注他們之間的相互作用
通過行為型模式,更清晰的劃分類和對象的職責(zé)羞酗。

行為型分為: 類行為型模式 對象行為型模式

  • 類行為型模式: 使用繼承關(guān)系在類之間分配行為腐宋,類行為型模式通過多態(tài)方式(polymorphism)分配父類與子類的職責(zé)

  • 對象行為型模式:使用對象的聚合關(guān)聯(lián)關(guān)系來分配行為,通過對象關(guān)聯(lián)等方式來分配兩個或多個職責(zé)檀轨。系統(tǒng)中藥盡量使用關(guān)聯(lián)關(guān)系來取代繼承關(guān)系

包含模式

  • 職責(zé)鏈模式(Chain of Responsibility)
    重要程度:3

  • 命令模式(Command)
    重要程度:4
    特點(diǎn)是請求調(diào)用者和接受者解耦胸竞;可在不通的時間制定請求,將請求排隊和執(zhí)行参萄;支持命令的撤銷和恢復(fù)卫枝,支持命令的組合

  • 解釋器模式(Interpreter)
    重要程度:1

  • 迭代器模式(Iterator)
    重要程度:5

  • 中介者模式(Mediator)
    重要程度:2

  • 備忘錄模式(Memento)
    重要程度:2

  • 觀察者模式(Observer)
    重要程度:5
    對象與對象之間的依賴關(guān)系,一個對象發(fā)生改變時自動通知其他對象拧揽,其他對象做出相應(yīng)的反應(yīng)剃盾。發(fā)生改變的對象(觀察目標(biāo)),被通知的對象(觀察者)。一個觀察目標(biāo)可對應(yīng)多個觀察者淤袜。觀察者之間沒有相互聯(lián)系
    優(yōu)點(diǎn):
    可實現(xiàn)表示層邏輯層的分離痒谴,并定義穩(wěn)定的消息更新機(jī)制,抽象了更新接口铡羡。
    在觀察者和觀察目標(biāo)之間建立一個抽象的耦合
    支持廣播通信积蔚。
    凡是涉及一對一或者一對多的對象交互場景都可以使用觀察者模式。

  • 狀態(tài)模式(State)
    重要程度:3
    也可以理解為我們在游戲開發(fā)中經(jīng)常使用的狀態(tài)機(jī)

  • 策略模式(Strategy)
    重要程度:4
    可以理解為解決一個問題有很多算法烦周,每種算法都是一種策略尽爆。
    我們可以定義一些獨(dú)立的類來封裝算法,每一個算法就是一個策略類读慎。為了保證策略一致性漱贱,我們做一個抽象類做算法的定義。
    這樣策略模式讓算法獨(dú)立于它的客戶變化而變化夭委,也稱作政策模式(Policy)

  • 模板方法模式(Template Method)
    重要程度:3

  • 訪問者模式(Visitor)
    重要程度:1

參考文檔

創(chuàng)建型模式
【UML 建姆ǎ】UML入門 之 交互圖 -- 時序圖 協(xié)作圖詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子崇摄,更是在濱河造成了極大的恐慌擎值,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逐抑,死亡現(xiàn)場離奇詭異鸠儿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)厕氨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門进每,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腐巢,你說我怎么就攤上這事品追。” “怎么了冯丙?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遭京。 經(jīng)常有香客問我胃惜,道長,這世上最難降的妖魔是什么哪雕? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任船殉,我火速辦了婚禮,結(jié)果婚禮上斯嚎,老公的妹妹穿的比我還像新娘利虫。我一直安慰自己,他們只是感情好堡僻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布糠惫。 她就那樣靜靜地躺著,像睡著了一般钉疫。 火紅的嫁衣襯著肌膚如雪硼讽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天牲阁,我揣著相機(jī)與錄音固阁,去河邊找鬼。 笑死城菊,一個胖子當(dāng)著我的面吹牛备燃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凌唬,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼并齐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冀膝,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤唁奢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窝剖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻掸,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年赐纱,在試婚紗的時候發(fā)現(xiàn)自己被綠了脊奋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡疙描,死狀恐怖诚隙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情起胰,我是刑警寧澤久又,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站效五,受9級特大地震影響地消,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜畏妖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一脉执、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戒劫,春花似錦半夷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疯攒,卻和暖如春嗦随,著一層夾襖步出監(jiān)牢的瞬間屋摔,已是汗流浹背舔涎。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工微王, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留池磁,地道東北人酵颁。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓羡榴,卻偏偏與公主長得像兴溜,于是被迫代替她去往敵國和親却妨。 傳聞我的和親對象是個殘疾皇子蜻直,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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