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

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

1 本篇概述

什么是設(shè)計(jì)模式

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

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

21種設(shè)計(jì)模式

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

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

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

2.1 設(shè)計(jì)模式簡(jiǎn)介

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

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

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

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

3.1 設(shè)計(jì)模式能夠帶來(lái)什么

一般我們?cè)谑褂媚撤N工具或物品時(shí),總是帶著某種目的,它總是能夠解決某些問(wèn)題或達(dá)成某種目的的方便,你比如說(shuō)筷子,我們?yōu)槭裁匆褂每曜幽??我們?yōu)槭裁匆褂闷嚹??那么我們?yōu)槭裁匆褂迷O(shè)計(jì)模式呢?

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

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

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

每種設(shè)計(jì)模式都是前輩們?cè)陂_發(fā)過(guò)程中真實(shí)問(wèn)題的寫照,它們描述了我們一直遇到的問(wèn)題,以及處理這些問(wèn)題的解決方案。

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

4.1 How to use

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

在適當(dāng)?shù)膱?chǎng)合適當(dāng)?shù)厥褂迷O(shè)計(jì)模式,并達(dá)到利己、利他人、利系統(tǒng)、利企業(yè),必須經(jīng)過(guò)長(zhǎng)時(shí)間的實(shí)踐,平時(shí)需要多思考,勤記筆記,但在這之前,我們得先學(xué)習(xí)設(shè)計(jì)模式。

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

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

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

工廠模式(Factory Pattern)

抽象工廠模式(Abstract Factory Pattern)

單例模式(Singleton Pattern)

單例模式(Singleton Pattern)

原型模式(Prototype Pattern)

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

適配器模式(Adapter Pattern)

橋接模式(Bridge Pattern)

過(guò)濾器模式(Filter、Criteria Pattern)

組合模式(Composite Pattern)

裝飾器模式(Decorator Pattern)

外觀模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

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

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

命令模式(Command Pattern)

解釋器模式(Interpreter Pattern)

迭代器模式(Iterator Pattern)

中介者模式(Mediator Pattern)

備忘錄模式(Memento Pattern)

觀察者模式(Observer Pattern)

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

空對(duì)象模式(Null Object Pattern)

策略模式(Strategy Pattern)

模板模式(Template Pattern)

訪問(wèn)者模式(Visitor Pattern)

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

1、開閉原則(Open Close Principle)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

我們無(wú)時(shí)無(wú)刻不在接觸著對(duì)象,以及對(duì)象的創(chuàng)建。最簡(jiǎn)單的方式就是new。而我們應(yīng)當(dāng)面向抽象編程,不能依賴于具體的實(shí)現(xiàn)。舉個(gè)例子,我要去買車,我直接去銷售店提車,而不需要知道這輛車是如何做出來(lái)的。

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

在具體的使用當(dāng)中直接依賴于這兩個(gè)打印機(jī)類的實(shí)現(xiàn),在這里設(shè)計(jì)一個(gè)工廠類,用戶根據(jù)需要來(lái)創(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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容