https://github.com/huang303513/Design-Pattern-For-iOS
http://www.reibang.com/nb/12207890
1赡模,抽象工廠:UIButton 的 buttonWithType 就是這種陶衅,在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。
2,責任鏈模式:
為請求創(chuàng)建了一個接收者對象的鏈鹦筹。這種模式給予請求的類型夜畴,對請求的發(fā)送者和接收者進行解耦拖刃。這種類型的設計模式屬于行為型模式。
在這種模式中贪绘,通常每個接收者都包含對另一個接收者的引用兑牡。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者税灌,依此類推均函。
3,外觀模式:
為子系統(tǒng)中的一組接口提供一個一致的界面菱涤,此模式定義了一個高層接口苞也,這個接口使得這一子系統(tǒng)更加容易使用。
4粘秆,迭代器模式:
提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內部表示如迟。
角色1,迭代器接口(協(xié)議): 定義了訪問遍歷元素的方法(標準)
角色2攻走,具體迭代器殷勘,
實現遍歷元素的方法
角色3,容器接口(協(xié)議)
定義元素的儲存方法
角色4昔搂,具體容器
實現了儲存元素的方法
5劳吠,命令模式:(Command Pattern)是一種數據驅動的設計模式,它屬于行為型模式巩趁。請求以命令的形式包裹在對象中,并傳給調用對象淳附。調用對象尋找可以處理該命令的合適的對象议慰,并把該命令傳給相應的對象,該對象執(zhí)行命令奴曙。
NSInvocation别凹, target-action
優(yōu)點:對請求排隊,或記錄請求日志洽糟,以及支持撤銷操作
https://github.com/Dzhijian/ZJDesignPatternStudy
角色1,,接口(聲明一個接口方法炉菲,),2,接受者(實現一個方法)坤溃,3,具體命令(1拍霜,持有接受者,2實現具體接口方法), 4,請求者(1薪介,執(zhí)行命令祠饺,2,保存所有命令操作汁政,可以撤回)
動態(tài)命令道偷,泛型命令缀旁,復合命令,閉包命令勺鸦,多線程并發(fā)
6并巍,適配器模式(https://github.com/GanggangGao/Designpatterns)
將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作换途。
適用場景:
1懊渡,接口不兼容
2,可以重復使用的類怀跛,用于一些沒有關聯的類一起工作
3距贷,統(tǒng)一輸出接口,輸入類型無法確定
角色1: 適配器
角色2:目標接口
角色3: 被適配者
實際開發(fā)中:tableview
類適配器要繼承被適配者
對象適配器要持有被適配者
7吻谋,工廠模式
角色1忠蝗,抽象產品
角色2,具體產品
角色3漓拾,抽象工廠
角色4阁最,具體工廠
8, 策略模式
1骇两,定義了一系列算法
2速种,每個算法單獨封裝
3,每個算法可以相互替換
4低千,客戶端可以獨立變化算法
角色1配阵,策略接口
角色2,具體策略
角色3示血,策略上下文(管理器)
9棋傍, 構建者模式
將一個復雜對象的創(chuàng)建和表示進行分離,同時你的創(chuàng)建順序不一樣难审,表示也不一樣瘫拣。使用多個簡單的對象一步一步構建成一個復雜的對象
角色1,抽象產品
角色2告喊,具體產品
角色3麸拄,抽象構建者
角色4,具體構建者
角色5黔姜,統(tǒng)一組裝類
10拢切,模板模式
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中秆吵。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟失球。
角色1,抽象類(控制流程)
角色2,具體模板實現類(可以復寫其中的一些步驟)
11实苞, 觀察者模式
當對象間存在一對多關系時豺撑,則使用觀察者模式(Observer Pattern)。比如黔牵,當一個對象被修改時聪轿,則會自動通知它的依賴對象。觀察者模式屬于行為型模式猾浦。
角色1陆错,被觀察者
角色2,具體被觀察者
角色3金赦,觀察者
角色4音瓷,具體觀察者
12,原型模式
用原型實例指定創(chuàng)建對象的種類夹抗,并且通過拷貝這些原型創(chuàng)建新的對象绳慎。
角色1,克隆接口
角色2漠烧,具體實現類
案例1杏愤,淺拷貝
適用于值類型,結構體
13已脓,享元模式
運用共享技術有效地支持大量細粒度的對象珊楼。(需要緩存的地方)
角色1,享元對象接口
角色2度液,具體享元對象
角色3厕宗,享元工廠
14,組合模式
將對象組合成樹形結構以表示"部分-整體"的層次結構堕担。組合模式使得用戶對單個對象和組合對象的使用具有一致性媳瞪。
角色1,抽象根節(jié)點
角色2照宝,具體子節(jié)點
UIView
注意點:根節(jié)點一定有數組存兒子節(jié)點
15,備忘錄模式
所謂備忘錄模式就是在不破壞封裝的前提下句葵,捕獲一個對象的內部狀態(tài)厕鹃,并在該對象之外保存這個狀態(tài),這樣可以在以后將對象恢復到原先保存的狀態(tài)乍丈。
角色1剂碴,創(chuàng)建一個備忘錄,可以恢復或記錄內部狀態(tài)
角色2轻专,備忘錄角色忆矛,用于存儲角色1的內部狀態(tài),并可以防止角色1以外的對象訪問角色2
角色3,負責存儲備忘錄
16催训,狀態(tài)模式
允許對象在內部狀態(tài)發(fā)生改變時改變它的行為洽议,對象看起來好像修改了它的類。
角色1漫拭,抽象狀態(tài)
角色2亚兄,具體狀態(tài)
角色3,狀態(tài)管理器(上下文)
17采驻,責任鏈模式
避免請求發(fā)送者與接收者耦合在一起审胚,讓多個對象都有可能接收請求,將這些對象連接成一條鏈礼旅,并且沿著這條鏈傳遞請求膳叨,直到有對象處理它為止。
18痘系,解析器模式
角色1菲嘴,抽象表達式
角色2,終結符表達式
角色3碎浇,非終結符表達式
角色4临谱,解析器上下文
19,橋接模式
將抽象部分與實現部分分離,使它們都可以獨立的變化奴璃。
角色1悉默, 抽象部分
角色2,具體抽象部分
角色3苟穆,抽象實現部分
角色4抄课,實現具體部分功能
20,訪問者模式
需要對一個對象結構中的對象進行很多不同的并且不相關的操作雳旅,而需要避免讓這些操作"污染"這些對象的類跟磨,使用訪問者模式將這些封裝到類中。
意圖:主要將數據結構與數據操作分離攒盈。
角色1抵拘,接口或者抽象類
作用:定義了每一個元素的訪問行為
角色2,具體的訪問者
作用:給出每個元素訪問時的具體行為
角色3型豁,元素接口
角色4僵蛛,具體元素
角色5,定義了我們所提到的對象結構
21迎变,外觀模式
隱藏系統(tǒng)的復雜性充尉,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口,這個接口使得這一子系統(tǒng)更加容易使用衣形。
角色1驼侠,系統(tǒng)對外接口
角色2,子系統(tǒng)接口
22,中介者模式(MVP)
用一個中介對象來封裝一系列的對象交互倒源,中介者使各對象不需要顯式地相互引用苛预,從而使其耦合松散,而且可以獨立地改變它們之間的交互相速。
角色1碟渺,抽象中介者(接口)
角色2,具體的中介者
角色3突诬,抽象的同事(接口)
角色4苫拍,具體同事
23, 代理模式
為其他對象提供一種代理以控制對這個對象的訪問。
24, 裝飾器模式
允許向一個現有的對象添加新的功能旺隙,同時又不改變其結構绒极。
一般的,我們?yōu)榱藬U展一個類經常使用繼承方式實現蔬捷,由于繼承為類引入靜態(tài)特征垄提,并且隨著擴展功能的增多,子類會很膨脹周拐。
優(yōu)點:裝飾類和被裝飾類可以獨立發(fā)展铡俐,不會相互耦合,裝飾模式是繼承的一個替代模式妥粟,裝飾模式可以動態(tài)擴展一個實現類的功能审丘。