詳細(xì)介紹請(qǐng)看這里
https://github.com/ochococo/Design-Patterns-In-Swift
創(chuàng)建型模式
創(chuàng)建型模式是處理對(duì)象創(chuàng)建的設(shè)計(jì)模式,試圖根據(jù)實(shí)際情況使用合適的方式創(chuàng)建對(duì)象感混。基本的對(duì)象創(chuàng)建方式可能會(huì)導(dǎo)致設(shè)計(jì)上的問(wèn)題礼烈,或增加設(shè)計(jì)的復(fù)雜度。創(chuàng)建型模式通過(guò)以某種方式控制對(duì)象的創(chuàng)建來(lái)解決問(wèn)題此熬。
根據(jù)不同的實(shí)際情況、場(chǎng)景或業(yè)務(wù)創(chuàng)建適合的對(duì)象
1犀忱、單例模式
單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對(duì)象阴汇,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為
對(duì)于Angular單例服務(wù),服務(wù)還是那個(gè)服務(wù) 注意服務(wù)依賴注入與組件供應(yīng)商
2搀庶、工廠方法
定義一個(gè)創(chuàng)建對(duì)象的接口,但讓實(shí)現(xiàn)這個(gè)接口的類來(lái)決定實(shí)例化哪個(gè)類哥倔。工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。
3咆蒿、抽象工廠
抽象工廠模式提供了一種方式东抹,可以將一組具有同一主題的單獨(dú)的工廠封裝起來(lái)沃测。在正常使用中,客戶端程序需要?jiǎng)?chuàng)建抽象工廠的具體實(shí)現(xiàn)蒂破,然后使用抽象工廠作為接口來(lái)創(chuàng)建這一主題的具體對(duì)象。
工廠模式 根據(jù)不同的參數(shù)生產(chǎn)不同的產(chǎn)品
工廠方法模式 不同的工廠 相同的行為創(chuàng)建不同的產(chǎn)品
抽象工廠 與工廠方法模式不同之處是 可以創(chuàng)建多種產(chǎn)品
4寞蚌、原型
通過(guò)“復(fù)制”一個(gè)已經(jīng)存在的實(shí)例來(lái)返回新的實(shí)例,而不是新建實(shí)例。被復(fù)制的實(shí)例就是我們所稱的“原型”挟秤,這個(gè)原型是可定制的。
也稱克隆模式 就是深拷貝一份對(duì)象
5艘刚、生成器
一種對(duì)象構(gòu)建模式。它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái)(抽象類別)攀甚,使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象箩朴。
行為型模式
在軟件工程中炸庞, 行為型模式為設(shè)計(jì)模式的一種類型,用來(lái)識(shí)別對(duì)象之間的常用交流模式并加以實(shí)現(xiàn)荚斯。如此,可在進(jìn)行這些交流活動(dòng)時(shí)增強(qiáng)彈性事期。
1、責(zé)任鏈模式
責(zé)任鏈模式在面向?qū)ο蟪淌皆O(shè)計(jì)里是一種軟件設(shè)計(jì)模式兽泣,它包含了一些命令對(duì)象和一系列的處理對(duì)象。每一個(gè)處理對(duì)象決定它能處理哪些命令對(duì)象唠倦,它也知道如何將它不能處理的命令對(duì)象傳遞給該鏈中的下一個(gè)處理對(duì)象称鳞。
具體處理者包含下級(jí)或上級(jí)或關(guān)聯(lián)對(duì)象的引用或指針 處理不掉的任務(wù)會(huì)傳遞給上級(jí)或下級(jí)或關(guān)聯(lián)對(duì)象處理
2胡岔、命令模式
命令模式是一種設(shè)計(jì)模式,它嘗試以對(duì)象來(lái)代表實(shí)際行動(dòng)枷餐。命令對(duì)象可以把行動(dòng)(action) 及其參數(shù)封裝起來(lái),于是這些行動(dòng)可以被:
重復(fù)多次
取消(如果該對(duì)象有實(shí)現(xiàn)的話)
取消后又再重做
游戲機(jī)方向鍵
3毛肋、解釋器
給定一種語(yǔ)言,定義他的文法的一種表示润匙,并定義一個(gè)解釋器,該解釋器使用該表示來(lái)解釋語(yǔ)言中句子孕讳。
對(duì)對(duì)象或表達(dá)式進(jìn)行分析或解釋巍膘,根據(jù)不同的解釋結(jié)果做不同的行為
4、迭代器
迭代器模式可以讓用戶通過(guò)特定的接口巡訪容器中的每一個(gè)元素而不用了解底層的實(shí)現(xiàn)芋簿。
5、中介者
用一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互与斤,中介者使各對(duì)象不需要顯示地相互作用,從而使耦合松散撩穿,而且可以獨(dú)立地改變它們之間的交互。
對(duì)象之間交互通過(guò)中間對(duì)象交互食寡,類似中介 P層
6、備忘錄
在不破壞封裝性的前提下冻河,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài)箍邮,并在該對(duì)象之外保存這個(gè)狀態(tài)锭弊。這樣就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài)
記住登錄密碼
7、觀察者
一個(gè)目標(biāo)對(duì)象管理所有相依于它的觀察者對(duì)象擂错,并且在它本身的狀態(tài)改變時(shí)主動(dòng)發(fā)出通知
8、狀態(tài)模式
在狀態(tài)模式中钮呀,對(duì)象的行為是基于它的內(nèi)部狀態(tài)而改變的。 這個(gè)模式允許某個(gè)類對(duì)象在運(yùn)行時(shí)發(fā)生改變爽醋。
App狀態(tài)等
9、策略模式
對(duì)象有某個(gè)行為蚂四,但是在不同的場(chǎng)景中光戈,該行為有不同的實(shí)現(xiàn)算法遂赠。策略模式:
定義了一族算法(業(yè)務(wù)規(guī)則);
封裝了每個(gè)算法跷睦;
這族的算法可互換代替(interchangeable)。
10抑诸、訪問(wèn)者模式
封裝某些作用于某種數(shù)據(jù)結(jié)構(gòu)中各元素的操作爹殊,它可以在不改變數(shù)據(jù)結(jié)構(gòu)的前提下定義作用于這些元素的新的操作。
結(jié)構(gòu)型模式
在軟件工程中結(jié)構(gòu)型模式是設(shè)計(jì)模式边灭,借由一以貫之的方式來(lái)了解元件間的關(guān)系,以簡(jiǎn)化設(shè)計(jì)健盒。
1称簿、適配器
適配器模式有時(shí)候也稱包裝樣式或者包裝(wrapper)。將一個(gè)類的接口轉(zhuǎn)接成用戶所期待的憨降。一個(gè)適配使得因接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個(gè)已存在的類中授药。
多一層類的訪問(wèn), 不兼容的類工作在一起
2悔叽、橋接
橋接模式將抽象部分與實(shí)現(xiàn)部分分離莱衩,使它們都可以獨(dú)立的變化娇澎。
3、組合
將對(duì)象組合成樹形結(jié)構(gòu)以表示‘部分-整體’的層次結(jié)構(gòu)趟庄。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
多個(gè)對(duì)象的相同行為可以組合在一起一起調(diào)用
4戚啥、修飾
修飾模式,是面向?qū)ο缶幊填I(lǐng)域中猫十,一種動(dòng)態(tài)地往一個(gè)類中添加新的行為的設(shè)計(jì)模式览濒。 就功能而言匾七,修飾模式相比生成子類更為靈活,這樣可以給某個(gè)對(duì)象而不是整個(gè)類添加一些功能江兢。
5、外觀
外觀模式為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的高層接口杉允,使得子系統(tǒng)更容易使用席里。
6、享元
使用共享物件拢驾,用來(lái)盡可能減少內(nèi)存使用量以及分享資訊給盡可能多的相似物件;它適合用于當(dāng)大量物件只是重復(fù)因而導(dǎo)致無(wú)法令人接受的使用大量?jī)?nèi)存繁疤。
7、保護(hù)代理模式
在代理模式中稠腊,創(chuàng)建一個(gè)類代表另一個(gè)底層類的功能。 保護(hù)代理用于限制訪問(wèn)架忌。
8、 虛擬代理
在代理模式中叹放,創(chuàng)建一個(gè)類代表另一個(gè)底層類的功能饰恕。 虛擬代理用于對(duì)象的需時(shí)加載井仰。
抽離API、分層糕档、擴(kuò)展、繼承速那、傳遞參數(shù)動(dòng)態(tài)創(chuàng)建俐银、傳遞對(duì)象端仰、更改屬性、更改狀態(tài)等 手法可以實(shí)現(xiàn)設(shè)計(jì)模式荔烧,沒(méi)有完美的設(shè)計(jì)模式,設(shè)計(jì)模式也有缺點(diǎn)鹤竭,要根據(jù)自己的使用場(chǎng)景、業(yè)務(wù)邏輯選擇或創(chuàng)造合適的設(shè)計(jì)模式才能達(dá)到方便的效果臀稚。因使用了設(shè)計(jì)模式吝岭,簡(jiǎn)單的邏輯會(huì)變的復(fù)雜化,復(fù)雜的邏輯會(huì)變的更清晰散劫,不要一味的強(qiáng)制使用設(shè)計(jì)模式、架構(gòu)模式获搏,要由主到次的使用。核心模塊失乾、復(fù)雜模塊要精心設(shè)計(jì),簡(jiǎn)單頁(yè)面碱茁、不常訪問(wèn)頁(yè)面要快速開發(fā),在迭代優(yōu)化早芭。