精彩的設(shè)計模式系列(一)

物是人非事事休庵佣,當(dāng)周圍的一切都發(fā)生著改變企蹭,包括我們的需求、程序等带兜,我們又該如何去應(yīng)對和解決呢?歡迎進(jìn)入編程人員必經(jīng)之路------設(shè)計模式

1 本篇概述

什么是設(shè)計模式

為什么要學(xué)習(xí)設(shè)計模式

怎么使用設(shè)計模式

21種設(shè)計模式

設(shè)計模式的遵循的六大原則

設(shè)計模式之工廠模式

2 什么是設(shè)計模式

2.1 設(shè)計模式簡介

設(shè)計模式最開始出現(xiàn)于一個合稱GOF(Gang of Four)四人幫所出的一本書Design Patterns - Elements of Reusable Object-Oriented Software(設(shè)計模式-可復(fù)用的面向?qū)ο筌浖?一書中来农。

設(shè)計模式在現(xiàn)代軟件開發(fā)當(dāng)中一般被認(rèn)為代表著前輩們的最佳實(shí)踐鞋真。

怎么說呢崇堰,它其實(shí)不是代表著某種模式沃于,可以說是軟件開發(fā)人員在編程過程中經(jīng)常遇到的問題的一些解決方案,也可以說是一些代碼設(shè)計的經(jīng)驗(yàn)的總結(jié)海诲。

3 為什么要學(xué)習(xí)設(shè)計模式

3.1 設(shè)計模式能夠帶來什么

一般我們在使用某種工具或物品時繁莹,總是帶著某種目的,它總是能夠解決某些問題或達(dá)成某種目的的方便特幔,你比如說筷子咨演,我們?yōu)槭裁匆褂每曜幽兀课覀優(yōu)槭裁匆褂闷嚹仳撬梗磕敲次覀優(yōu)槭裁匆褂迷O(shè)計模式呢薄风?

代碼復(fù)用饵较。合理地使用設(shè)計模式可以讓我們的代碼實(shí)現(xiàn)多處復(fù)用,大大減少開發(fā)時間遭赂,提高效率循诉,節(jié)省開發(fā)成本。

簡潔易維護(hù)撇他。設(shè)計模式是反復(fù)使用的茄猫,為人所知曉的,方便大家維護(hù)的使用困肩。便于開發(fā)人員讀懂代碼划纽,進(jìn)行維護(hù)等。

設(shè)計模式使開發(fā)工程化锌畸,模范化勇劣。項(xiàng)目中合理地使用設(shè)計模式可以完美地解決很多問題。

每種設(shè)計模式都是前輩們在開發(fā)過程中真實(shí)問題的寫照潭枣,它們描述了我們一直遇到的問題芭毙,以及處理這些問題的解決方案。

4 怎么使用設(shè)計模式

4.1 How to use

要想融會貫通卸耘、觸類旁通地在軟件設(shè)計當(dāng)中使用設(shè)計模式退敦,這無疑是一名出色的軟件工程師了(俺還是個菜鳥級┭┮﹏┭┮)

在適當(dāng)?shù)膱龊线m當(dāng)?shù)厥褂迷O(shè)計模式,并達(dá)到利己蚣抗、利他人侈百、利系統(tǒng)、利企業(yè)翰铡,必須經(jīng)過長時間的實(shí)踐钝域,平時需要多思考,勤記筆記锭魔,但在這之前例证,我們得先學(xué)習(xí)設(shè)計模式。

5 二十一種設(shè)計模式

常見的設(shè)計模式有21種迷捧,大體可分為三類:創(chuàng)建型织咧、結(jié)構(gòu)型、行為型

創(chuàng)建型:主要是解決對象是如何產(chǎn)生或創(chuàng)建出來等相關(guān)問題

工廠模式(Factory Pattern)

抽象工廠模式(Abstract Factory Pattern)

單例模式(Singleton Pattern)

單例模式(Singleton Pattern)

原型模式(Prototype Pattern)

結(jié)構(gòu)型:主要是研究對象之間的關(guān)系

適配器模式(Adapter Pattern)

橋接模式(Bridge Pattern)

過濾器模式(Filter漠秋、Criteria Pattern)

組合模式(Composite Pattern)

裝飾器模式(Decorator Pattern)

外觀模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

行為型:主要是研究對象的行為(對象與對象之間是如何聯(lián)系的笙蒙,如何通信的)

責(zé)任鏈模式(Chain of Responsibility Pattern)

命令模式(Command Pattern)

解釋器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

備忘錄模式(Memento Pattern)

觀察者模式(Observer Pattern)

狀態(tài)模式(State Pattern)

空對象模式(Null Object Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

訪問者模式(Visitor Pattern)

6 設(shè)計模式的六大原則

1、開閉原則(Open Close Principle)

開閉原則的意思是:對擴(kuò)展開放庆锦,對修改關(guān)閉捅位。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼,實(shí)現(xiàn)一個熱插拔的效果艇搀。簡言之尿扯,是為了使程序的擴(kuò)展性好,易于維護(hù)和升級焰雕。想要達(dá)到這樣的效果姜胖,我們需要使用接口和抽象類。

2淀散、里氏代換原則(Liskov Substitution Principle)

里氏代換原則是面向?qū)ο笤O(shè)計的基本原則之一右莱。里氏代換原則中說,任何基類可以出現(xiàn)的地方档插,子類一定可以出現(xiàn)慢蜓。LSP 是繼承復(fù)用的基石,只有當(dāng)派生類可以替換掉基類郭膛,且軟件單位的功能不受到影響時晨抡,基類才能真正被復(fù)用,而派生類也能夠在基類的基礎(chǔ)上增加新的行為则剃。里氏代換原則是對開閉原則的補(bǔ)充耘柱。實(shí)現(xiàn)開閉原則的關(guān)鍵步驟就是抽象化,而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn)棍现,所以里氏代換原則是對實(shí)現(xiàn)抽象化的具體步驟的規(guī)范调煎。

3、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)

這個原則是開閉原則的基礎(chǔ)己肮,具體內(nèi)容:針對接口編程士袄,依賴于抽象而不依賴于具體。

4谎僻、接口隔離原則(Interface Segregation Principle)

這個原則的意思是:使用多個隔離的接口娄柳,比使用單個接口要好。它還有另外一個意思是:降低類之間的耦合度艘绍。由此可見赤拒,其實(shí)設(shè)計模式就是從大型軟件架構(gòu)出發(fā)、便于升級和維護(hù)的軟件設(shè)計思想诱鞠,它強(qiáng)調(diào)降低依賴挎挖,降低耦合。

5般甲、迪米特法則肋乍,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個實(shí)體應(yīng)當(dāng)盡量少地與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨(dú)立敷存。

6、合成復(fù)用原則(Composite Reuse Principle)

合成復(fù)用原則是指:盡量使用合成/聚合的方式,而不是使用繼承锚烦。

上述原則詳情文章可參考如下:

OOP面向?qū)ο缶幊痰牧笤瓌t(上)

OOP面向?qū)ο缶幊痰牧笤瓌t(下)

6 設(shè)計模式之工廠模式

后面可能不會羅列所有的設(shè)計模式觅闽,但是盡可能地進(jìn)行筆記的概述吧。

我們無時無刻不在接觸著對象涮俄,以及對象的創(chuàng)建蛉拙。最簡單的方式就是new。而我們應(yīng)當(dāng)面向抽象編程彻亲,不能依賴于具體的實(shí)現(xiàn)孕锄。舉個例子,我要去買車苞尝,我直接去銷售店提車畸肆,而不需要知道這輛車是如何做出來的。

下面代碼示例:我需要一個打印機(jī)宙址,我不必知道打印機(jī)是怎么制造出來的轴脐,我只關(guān)心什么牌子的好,現(xiàn)在有兩個牌子的打印機(jī)抡砂,惠普打印機(jī)和佳能打印機(jī)(如下圖)大咱,它們都能實(shí)現(xiàn)打印功能,將打印機(jī)的行為抽象出來為IPrinter

在具體的使用當(dāng)中直接依賴于這兩個打印機(jī)類的實(shí)現(xiàn),在這里設(shè)計一個工廠類注益,用戶根據(jù)需要來創(chuàng)建不同的打印機(jī)類碴巾,創(chuàng)建打印機(jī)交給專業(yè)的工廠去做,我們只需要使用丑搔。如下圖

好了餐抢,今天的學(xué)習(xí)到這里結(jié)束了,往篇精彩奉上:

優(yōu)雅的LINQ

手把手帶你入門github

學(xué)習(xí)如何在linux上部署應(yīng)用

如何學(xué)習(xí)IoC和DI

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末低匙,一起剝皮案震驚了整個濱河市旷痕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顽冶,老刑警劉巖欺抗,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異强重,居然都是意外死亡绞呈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門间景,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佃声,“玉大人,你說我怎么就攤上這事倘要』鳎” “怎么了十拣?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長志鹃。 經(jīng)常有香客問我夭问,道長,這世上最難降的妖魔是什么曹铃? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任缰趋,我火速辦了婚禮,結(jié)果婚禮上陕见,老公的妹妹穿的比我還像新娘秘血。我一直安慰自己,他們只是感情好评甜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布灰粮。 她就那樣靜靜地躺著,像睡著了一般蜕着。 火紅的嫁衣襯著肌膚如雪谋竖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天承匣,我揣著相機(jī)與錄音蓖乘,去河邊找鬼。 笑死韧骗,一個胖子當(dāng)著我的面吹牛嘉抒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袍暴,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼些侍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了政模?” 一聲冷哼從身側(cè)響起岗宣,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淋样,沒想到半個月后耗式,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趁猴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年刊咳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儡司。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡娱挨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捕犬,到底是詐尸還是另有隱情跷坝,我是刑警寧澤酵镜,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站探孝,受9級特大地震影響笋婿,放射性物質(zhì)發(fā)生泄漏誉裆。R本人自食惡果不足惜顿颅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望足丢。 院中可真熱鬧粱腻,春花似錦、人聲如沸斩跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耀鸦。三九已至柬批,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袖订,已是汗流浹背氮帐。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洛姑,地道東北人上沐。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像楞艾,于是被迫代替她去往敵國和親参咙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355