設(shè)計(jì)模式主要分三個(gè)類型:創(chuàng)建型、結(jié)構(gòu)型和行為型。
其中創(chuàng)建型有:
一、Singleton,單例模式:保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)
二、Abstract Factory,抽象工廠:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)須指定它們的具體類。
三、Factory Method,工廠方法:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,F(xiàn)actory Method使一個(gè)類的實(shí)例化延遲到了子類。
四、Builder,建造模式:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與他的表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
五、Prototype,原型模式:用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型來(lái)創(chuàng)建新的對(duì)象。
行為型有:
六、Iterator,迭代器模式:提供一個(gè)方法順序訪問一個(gè)聚合對(duì)象的各個(gè)元素,而又不需要暴露該對(duì)象的內(nèi)部表示。
七、Observer,觀察者模式:定義對(duì)象間一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知自動(dòng)更新。
八、Template Method,模板方法:定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可以重定義該算法得某些特定步驟。
九、Command,命令模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)和記錄請(qǐng)求日志,以及支持可撤銷的操作。
十、State,狀態(tài)模式:允許對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變他的行為。對(duì)象看起來(lái)似乎改變了他的類。
十一、Strategy,策略模式:定義一系列的算法,把他們一個(gè)個(gè)封裝起來(lái),并使他們可以互相替換,本模式使得算法可以獨(dú)立于使用它們的客戶。
十二、China of Responsibility,職責(zé)鏈模式:使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的送發(fā)者和接收者之間的耦合關(guān)系
十三、Mediator,中介者模式:用一個(gè)中介對(duì)象封裝一些列的對(duì)象交互。
十四、Visitor,訪問者模式:表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用于這個(gè)元素的新操作。
十五、Interpreter,解釋器模式:給定一個(gè)語(yǔ)言,定義他的文法的一個(gè)表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。
十六、Memento,備忘錄模式:在不破壞對(duì)象的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。
結(jié)構(gòu)型有:
十七、Composite,組合模式:將對(duì)象組合成樹形結(jié)構(gòu)以表示部分整體的關(guān)系,Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
十八、Facade,外觀模式:為子系統(tǒng)中的一組接口提供一致的界面,fa?ade提供了一高層接口,這個(gè)接口使得子系統(tǒng)更容易使用。
十九、Proxy,代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問
二十、Adapter,適配器模式:將一類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些類可以一起工作。
二十一、Decrator,裝飾模式:動(dòng)態(tài)地給一個(gè)對(duì)象增加一些額外的職責(zé),就增加的功能來(lái)說,Decorator模式相比生成子類更加靈活。
二十二、Bridge,橋模式:將抽象部分與它的實(shí)現(xiàn)部分相分離,使他們可以獨(dú)立的變化。
二十三、Flyweight,享元模式



1.單一職責(zé)原則(SingleResponsibilityPrinciple)
2.里氏替換原則(LiskovSubstitutionPrinciple)
3.依賴倒置原則(DependenceInversionPrinciple)
4.接口隔離原則(InterfaceSegregationPrinciple)
5.迪米特法則(LawOfDemeter)
6.開閉原則(OpenClosePrinciple)
在軟件設(shè)計(jì)的過程中,只要我們盡量遵循以上六條設(shè)計(jì)原則,設(shè)計(jì)出來(lái)的軟件才會(huì)是一個(gè)優(yōu)秀的軟件,它必定足夠健壯、足夠穩(wěn)定,并以極大的靈活性來(lái)迎接隨時(shí)而來(lái)的需求變更等因素。3、設(shè)計(jì)模式的四要素設(shè)計(jì)模式使人們可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu)。將已證實(shí)的技術(shù)表述成設(shè)計(jì)模式也會(huì)使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計(jì)思路。
模式名稱(pattern name)
一個(gè)助記名,它用一兩個(gè)詞來(lái)描述模式的問題、解決方案和效果。命名一個(gè)新的模式增加了我們的設(shè)計(jì)詞匯。設(shè)計(jì)模式允許我們?cè)谳^高的抽象層次上進(jìn)行設(shè)計(jì)?;?于一個(gè)模式詞匯表,我們自己以及同事之間就可以討論模式并在編寫文檔時(shí)使用它們。模式名可以幫助我們思考,便于我們與其他人交流設(shè)計(jì)思想及設(shè)計(jì)結(jié)果。找到 恰當(dāng)?shù)哪J矫彩俏覀冊(cè)O(shè)計(jì)模式編目工作的難點(diǎn)之一。
問題(problem)
描述了應(yīng)該在何時(shí)使用模式。它解釋了設(shè)計(jì)問題和問題存在的前因后果,它可能描述了特定的設(shè)計(jì)問題,如怎樣用對(duì)象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或?qū)ο蠼Y(jié)構(gòu)。有時(shí)候,問題部分會(huì)包括使用模式必須滿足的一系列先決條件。
解決方案(solution)
描述了應(yīng)該在何時(shí)使用模式。它解釋了設(shè)計(jì)問題和問題存在的前因后果,它可能描述了特定的設(shè)計(jì)問題,如怎樣用對(duì)象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或?qū)ο蠼Y(jié)構(gòu)。有時(shí)候,問題部分會(huì)包括使用模式必須滿足的一系列先決條件。
解決方案(solution)
描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板,可應(yīng)用于多種不同場(chǎng)合,所以解決方案并不描述一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來(lái)解決這個(gè)問題。
效果(consequences)
描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問題。盡管我們描述設(shè)計(jì)決策時(shí),并不總提到模式效果,但它們對(duì)于評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處具有重要意義。軟件效果大多關(guān)注對(duì)時(shí)間和空間的衡量,它們也表述了語(yǔ)言和實(shí)現(xiàn)問題。因?yàn)閺?fù)用是面向?qū)ο笤O(shè)計(jì)的要素之一,所以模式效果包括它對(duì)系統(tǒng)的靈活性、擴(kuò)充性或可移植性的影響,顯式地列出這些效果對(duì)理解和評(píng)價(jià)這些模式很有幫助。4、設(shè)計(jì)模式分類概覽《設(shè)計(jì)模式》一書,第 1 次將設(shè)計(jì)模式提升到理論高度,并將之規(guī)范化。書中一共總結(jié)了23種基本的設(shè)計(jì)模式,《設(shè)計(jì)模式》下載這23種設(shè)計(jì)模式,幾乎涵蓋了面向?qū)ο笤O(shè)計(jì)過程中所有問題的解決方案,書中提到的23種設(shè)計(jì)模式分別是:

5、設(shè)計(jì)模式的設(shè)計(jì)場(chǎng)景那么如此多的設(shè)計(jì)模式又是從何而來(lái)呢?《易經(jīng)》有云:“易有太極,是生兩儀,兩儀生四象,四象生八卦”,意思就是說世界萬(wàn)物皆有起源。設(shè)計(jì)模式的起源,是面向?qū)ο蟪绦蛟O(shè)計(jì)思想,是面向?qū)ο笤O(shè)計(jì)的精髓——抽象。面向?qū)ο笸ㄟ^類和對(duì)象來(lái)實(shí)現(xiàn)抽象,實(shí)現(xiàn)時(shí)產(chǎn)生了面向?qū)ο蟮娜齻€(gè)重要機(jī)制:封裝、繼承、多態(tài),正是這三個(gè)機(jī)制衍生出了各種各樣的設(shè)計(jì)模式。

6、設(shè)計(jì)模式的分類描述設(shè)計(jì)模式,分為創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式
設(shè)計(jì)模式的分類描述:
1.抽象工廠模式
為一個(gè)產(chǎn)品族提供了統(tǒng)一的創(chuàng)建接口。當(dāng)需要這個(gè)產(chǎn)品族的某一系列的時(shí)候,可以從抽象工廠中選出相應(yīng)的系列創(chuàng)建一個(gè)具體的工廠類。
2.建造者模式
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
3.工廠方法模式
定義一個(gè)接口用于創(chuàng)建對(duì)象,但是讓子類決定初始化哪個(gè)類。工廠方法把一個(gè)類的初始化下放到子類。
4.原型模式
用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。
5.單例模式
確保一個(gè)類只有一個(gè)實(shí)例,并提供對(duì)該實(shí)例的全局訪問。
5.多例模式
確保一個(gè)類只有命名的實(shí)例,并提供對(duì)這些實(shí)例的全局訪問。
對(duì)象池模式
通過回收利用對(duì)象避免獲取和釋放資源所需的昂貴成本。
惰性初始模式
推遲對(duì)象的創(chuàng)建、數(shù)據(jù)的計(jì)算等需要耗費(fèi)較多資源的操作,只有在第一次訪問的時(shí)候才執(zhí)行。
資源獲取為初始化
通過綁定到合適對(duì)象的生命周期來(lái)確保資源被適當(dāng)?shù)蒯尫拧?/p>
結(jié)構(gòu)型模式
6.適配器模式
將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口表示。適配器模式可以消除由于接口不匹配所造成的類兼容性問題。
7.橋接模式
將一個(gè)抽象與實(shí)現(xiàn)解耦,以便兩者可以獨(dú)立的變化。
8.組合模式
把多個(gè)對(duì)象組成樹狀結(jié)構(gòu)來(lái)表示局部與整體,這樣用戶可以一樣的對(duì)待單個(gè)對(duì)象和對(duì)象的組合。
9.裝飾模式
向某個(gè)對(duì)象動(dòng)態(tài)地添加更多的功能。修飾模式是除類繼承外另一種擴(kuò)展功能的方法。
10.外觀模式
為子系統(tǒng)中的一組接口提供一個(gè)一致的界面, 外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
11.享元
通過共享以便有效的支持大量小顆粒對(duì)象。
12.代理
為其他對(duì)象提供一個(gè)代理以控制對(duì)這個(gè)對(duì)象的訪問。
行為型模式
13.職責(zé)鏈
為解除請(qǐng)求的發(fā)送者和接收者之間耦合,而使多個(gè)對(duì)象都有機(jī)會(huì)處理這個(gè)請(qǐng)求。將這些對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它。
14.命令
將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可取消的操作。
15.解釋器
給定一個(gè)語(yǔ)言, 定義它的文法的一種表示,并定義一個(gè)解釋器, 該解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。
16.迭代器
提供一種方法順序訪問一個(gè)聚合對(duì)象中各個(gè)元素, 而又不需暴露該對(duì)象的內(nèi)部表示。
17.中介者
包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互明顯作用,從而使它們可以松散偶合。當(dāng)某些對(duì)象之間的作用發(fā)生改變時(shí),不會(huì)立即影響其他的一些對(duì)象之間的作用,保證這些作用可以彼此獨(dú)立的變化。
18.備忘錄
備忘錄對(duì)象是一個(gè)用來(lái)存儲(chǔ)另外一個(gè)對(duì)象內(nèi)部狀態(tài)的快照的對(duì)象。備忘錄模式的用意是在不破壞封裝的條件下,將一個(gè)對(duì)象的狀態(tài)捉住,并外部化,存儲(chǔ)起來(lái),從而可以在將來(lái)合適的時(shí)候把這個(gè)對(duì)象還原到存儲(chǔ)起來(lái)的狀態(tài)。
19.觀察者模式
在對(duì)象間定義一個(gè)一對(duì)多的聯(lián)系性,由此當(dāng)一個(gè)對(duì)象改變了狀態(tài),所有其他相關(guān)的對(duì)象會(huì)被通知并且自動(dòng)刷新。
20.狀態(tài)
讓一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候,其行為也隨之改變。狀態(tài)模式需要對(duì)每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)便改變所選的子類。
21.策略
定義一個(gè)算法的系列,將其各個(gè)分裝,并且使他們有交互性。策略模式使得算法在用戶使用的時(shí)候能獨(dú)立的改變。
22.模板方法
模板方法模式準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法及具體構(gòu)造子類的形式實(shí)現(xiàn),然后聲明一些抽象方法來(lái)迫使子類實(shí)現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對(duì)剩余的邏輯有不同的實(shí)現(xiàn)。先構(gòu)建一個(gè)頂級(jí)邏輯框架,而將邏輯的細(xì)節(jié)留給具體的子類去實(shí)現(xiàn)。
23.訪問者
封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作。一旦這些操作需要修改,接受這個(gè)操作的數(shù)據(jù)結(jié)構(gòu)可以保持不變。訪問者模式適用于數(shù)據(jù)結(jié)構(gòu)相對(duì)未定的系統(tǒng),它把數(shù)據(jù)結(jié)構(gòu)和作用于結(jié)構(gòu)上的操作之間的耦合解脫開,使得操作集合可以相對(duì)自由的演化。
空對(duì)象
通過提供默認(rèn)對(duì)象來(lái)避免空引用。
黑板
廣義的觀察者在系統(tǒng)范圍內(nèi)交流信息,允許多位讀者和寫者。
規(guī)格
以布爾形式表示的可重綁定的商業(yè)邏輯。
下圖為今年部分iOS開發(fā)的視頻教程,因?yàn)椴欢〞r(shí)更新中故不做多的截圖,如果有iOS開發(fā)上的問題不懂或者需要視頻教程可以看我的個(gè)人簡(jiǎn)介。
不定時(shí)更新中。
