24種設(shè)計模式

讀了大話設(shè)計模式一書.暫做總結(jié),有的理解了,有的還不太理解,以后慢慢理解

1.簡單工廠模式

概念: 根據(jù)不同的條件初始化不同的對象

加減運(yùn)算來說,聲明一個運(yùn)算類,然后各種運(yùn)算都繼承它,就是一種簡單的工廠模式,雖然不見得就多好,講的是這種思想

加上一個初始化控制邏輯,就是工廠模式,根據(jù)不同的條件初始化不同的對象

2.策略模式

概念:算法的封裝,算法的工廠模式

它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化不會影響到使用算法的客戶

看了半天,感覺就是工廠模式的升級版,,把計算部分做成了工廠模式

3.裝飾模式

概念:在不必改變原類文件和使用繼承的情況下,動態(tài)地擴(kuò)展一個對象的功能呕诉。它是通過創(chuàng)建一個包裝對象江掩,也就是裝飾來包裹真實(shí)的對象。

繼承并添加一些方法.不給原類擴(kuò)展,只添加在子類上

原類不需要知道這些方法和擴(kuò)展.

4.代理模式

算是最常用的模式之一了吧,規(guī)定協(xié)議方法,設(shè)置代理,用代理執(zhí)行協(xié)議

5.工廠方法模式

概念:封裝類中不變的部分,提取其中個性化善變的部分為獨(dú)立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的乓诽。它的核心結(jié)構(gòu)有四個角色,分別是抽象工廠咒程;具體工廠鸠天;抽象產(chǎn)品;具體產(chǎn)品

父類給接口(協(xié)議)
在代理方法中初始化子類
子類再次使用工廠模式調(diào)用方法

有點(diǎn)胡
就是把判斷工廠類型這一步,判斷type這一步放在了代理里判斷
寫代理的時候再初始化

6.原型模式

概念:用原型實(shí)例指定創(chuàng)建對象的種類帐姻,并且通過拷貝這些原型創(chuàng)建新的對象稠集。

就是給類一個clone方法,方便類的復(fù)制

淺復(fù)制 只復(fù)制了指針地址

深復(fù)制 新開的地址,都復(fù)制了

7.模板方法模式

重寫父類的方法

重復(fù) = 易錯 + 難改

利用了多態(tài),子類重寫父類的方法,利用父類的一些邏輯而減少代碼量

8.外觀模式

概念:為子系統(tǒng)中的一組接口提供一個一致的界面奶段,定義一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用巍杈。

感覺就是tableview的那種代理形式,把具體的子視圖通過代理拋出來

9.建造者模式 又叫生成器模式

概念:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示 

把一個復(fù)雜的對象的構(gòu)建與它的表示分離,讓同樣的建造過程可以創(chuàng)建不同的表示意圖

用戶只需要制定類型就可以得到對象,而不用管具體的過程和細(xì)節(jié)

就是封裝初始化方法嘍,有時候需要一個指揮者,就是xx所謂的loginhelper嘍

10.觀察者模式

概念:觀察者模式(有時又被稱為發(fā)布(publish )-訂閱(Subscribe)模式扛伍、模型-視圖(View)模式筷畦、源-收聽者(Listener)模式或從屬者模式)是軟件設(shè)計模式的一種。在此種模式中刺洒,一個目標(biāo)物件管理所有相依于它的觀察者物件鳖宾,并且在它本身的狀態(tài)改變時主動發(fā)出通知。這通常透過呼叫各觀察者所提供的方法來實(shí)現(xiàn)逆航。此種模式通常被用來實(shí)現(xiàn)事件處理系統(tǒng)

觀察者模式也就是所謂的KVO
監(jiān)聽 發(fā)現(xiàn)變化后調(diào)用方法
怎么實(shí)現(xiàn)的?在set方法中加了幾行

觀察和被觀察的對象都是抽象的

通知者 被通知者
被觀察者  觀察者(保留了被通知者的集合)  被通知者(遵循某協(xié)議或某父類)

11.抽象工廠模式

概念 : 抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)鼎文。抽象工廠模式是指當(dāng)有多個抽象角色時,使用的一種工廠模式因俐。抽象工廠模式可以向客戶端提供一個接口拇惋,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象抹剩。根據(jù)里氏替換原則撑帖,任何接受父類型的地方,都應(yīng)當(dāng)能夠接受子類型澳眷。因此胡嘿,實(shí)際上系統(tǒng)所需要的,僅僅是類型與這些抽象產(chǎn)品角色相同的一些實(shí)例钳踊,而不是這些抽象產(chǎn)品的實(shí)例衷敌。換言之,也就是這些抽象產(chǎn)品的具體子類的實(shí)例拓瞪。工廠類負(fù)責(zé)創(chuàng)建抽象產(chǎn)品的具體子類的實(shí)例缴罗。

抽象工廠模式就是對數(shù)據(jù)的抽象,也就是數(shù)據(jù)的訪問給他建立一個父類

通過多態(tài)來初始化不同的數(shù)據(jù),抽象了數(shù)據(jù)層

12.狀態(tài)模式

概念:允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它的類

不同的狀態(tài)設(shè)置不同的參數(shù),在類中走不同的方法

多個不同的設(shè)置,從而看起來同一個類同一個方法卻不像同一個類 

13.適配器模式

概念: 將一個類的接口適配成用戶所期待的祭埂。一個適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄鹇髋溃龇ㄊ菍㈩愖约旱慕涌诎谝粋€已存在的類中。

當(dāng)我們要使用一個原有的類得接口
但是它和我們的類的要求不同的時候
我們可以建立一個中間類,來吧接口進(jìn)行封裝(有用過)
然后通過這個類提供的接口進(jìn)行訪問

14.備忘錄模式

概念: 在不破壞封裝性的前提下

保存對象的內(nèi)部狀態(tài)
這樣可以將對象恢復(fù)到原先保存的狀態(tài)

就是建立一個備忘錄類

把對原類的封裝細(xì)節(jié)給他,然后他負(fù)責(zé)備份并且提供到處導(dǎo)入方法

15.組合模式

 概念:將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)沟堡,組合模式使得用戶對單個對象和組合對象的使用具有一致性侧但。掌握組合模式的重點(diǎn)是要理解清楚 “部分/整體” 還有 ”單個對象“ 與 "組合對象" 的含義。
 
樹狀圖的部分整體結(jié)構(gòu)
同一個對象擁有樹狀圖的  父親 兒子 兄弟等.這樣就是完整的組合模式

如果我們需要安全一點(diǎn),可以把它的節(jié)點(diǎn)封裝成方法
根據(jù)不同的節(jié)點(diǎn)提供不同的方法

通知可以利用多態(tài),不同的節(jié)點(diǎn)擁有不同的子類

不同的子類有不同的方法
但是他們都擁有節(jié)點(diǎn),通過方法添加關(guān)系

`組合模式的標(biāo)志就是 樹狀圖`

16.迭代器模式

概念:提供一種方法順序訪問一個聚合對象中的各種元素航罗,而又不暴露該對象的內(nèi)部表示禀横。

提供一個能訪問局和對象的方法

這個方法可以不暴露私有成員

當(dāng)一個聚合對象(我理解為容器,有多個成員)

有多種方式進(jìn)行遍歷的時候

我們需要為聚合對象 提供以下接口

開始 下一個 石佛結(jié)束 當(dāng)前的index 等接口

而不是把成員都暴露在外,讓客戶端進(jìn)行查詢和修改,這是不安全的

其實(shí)就是一個OC基本數(shù)據(jù)類型的實(shí)現(xiàn)

17.單例模式

概念: 保證只有一個實(shí)例,并且提供一個可以訪問他的全局訪問點(diǎn)

首先 懶加載的概念.避免對象重新初始化

單例是在懶加載的基礎(chǔ)上對整個類的懶加載并且把它駐留在內(nèi)存中
隨時可以調(diào)用

向外拋出一個獲得單例的方法,而不是每次都使用初始化方法

多線程訪問單例可能會造成多個初始化,這個時候我們需要線程鎖來保護(hù),GCD已經(jīng)幫我們做了,注意線程鎖加載nil判斷里.不用每次訪問都添加線程鎖

靜態(tài)變量 

惡漢式初始化, 一開始就初始化

懶漢式單例類 到結(jié)束的時候才初始化

18.橋接模式

概念:將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化粥血。它是一種對象結(jié)構(gòu)型模式柏锄,又稱為柄體(Handle and Body)模式或接口(Interface)模式酿箭。

首先我們有一個原則,就是繼承不能有太多層次

優(yōu)先使用聚合關(guān)系(擁有)
實(shí)現(xiàn)指的是抽象類和它的派生類用來實(shí)現(xiàn)自己的對象然后在它的抽象中提供對外的接口

比如手機(jī)品牌和手機(jī)游戲

手機(jī)游戲就是實(shí)現(xiàn) 手機(jī)品牌就是抽象
我們把手機(jī)游戲的實(shí)現(xiàn)單獨(dú)拿出來,然后針對不同的品牌做接口

現(xiàn)在的游戲都是使用游戲引擎單獨(dú)開發(fā)的,開發(fā)出來在針對不同的系統(tǒng)平臺做接口

但是核心實(shí)現(xiàn)是一套

19.命令模式

概念:將一組行為抽象為對象,實(shí)現(xiàn)二者之間的松耦合趾娃。這就是命令模式(Command Pattern)缭嫡。

把一個請求封裝為一個對象

這個對象有一個日志
有命令隊(duì)列
并且命令隊(duì)列可以根據(jù)執(zhí)行狀態(tài)進(jìn)行回絕

這個對象就是服務(wù)員

服務(wù)員記錄菜單,通知做菜的師傅, 統(tǒng)計菜單,統(tǒng)計命令,執(zhí)行刪除和回絕等任務(wù).

20.職責(zé)鏈模式

多個對象都有機(jī)會處理請求

沿著鏈路傳遞請求,直到有一個能處理它為止

就是父類定義一個處理請求的方法

所有子類都繼承了這個方法
子類可以選擇向上傳遞,或者自己處理

客戶端不需要誰來處理鏈路請求

鏈路中的對象不需要知道鏈路的結(jié)構(gòu)
客戶端傳遞請求的時候直到一個對象處理

21.中介者模式

系統(tǒng)作為一個整體,對系統(tǒng)的修改往往比較困難

用一個中介對象

來進(jìn)行類和類之間的引用操作
就是所謂的viewmodel 其實(shí)
把引用從每個對象之間分離
對象只需要拋出方法就行了

中介者可以讓我們從對象的本身轉(zhuǎn)移到對象的交互上來
更宏觀的觀察各個對象

優(yōu)點(diǎn)就是集中控制

缺點(diǎn)同上

就是所謂的manager

22.享元模式

概念:它使用共享物件,用來盡可能減少內(nèi)存使用量以及分享資訊給盡可能多的相似物件抬闷;它適合用于只是因重復(fù)而導(dǎo)致使用無法令人接受的大量內(nèi)存的大量物件妇蛀。通常物件中的部分狀態(tài)是可以分享。常見做法是把它們放在外部數(shù)據(jù)結(jié)構(gòu)笤成,當(dāng)需要使用時再將它們傳遞給享元

一些代碼邏輯是可以共享的

享元模式分為內(nèi)部狀態(tài)和外部狀態(tài),其中內(nèi)部狀態(tài)是高度一致的代碼邏輯,外部狀態(tài)通常是每個對象的區(qū)別,他們共同組成一個享元對象

比如網(wǎng)站

核心代碼+用戶信息類

23.解釋器模式

如果一種特定類型的問題發(fā)生的頻率足夠高

那么可能就值得將訪問這個問題的實(shí)例來表述為一個簡單的句子
這樣就可以構(gòu)建一個解釋器(讓我想起了枚舉)

正則表達(dá)式
就是給一個句子或者語法
通過它來執(zhí)行操作

24.訪問者模式

寫分類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末评架,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炕泳,更是在濱河造成了極大的恐慌纵诞,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件培遵,死亡現(xiàn)場離奇詭異浙芙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)籽腕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門茁裙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人节仿,你說我怎么就攤上這事晤锥。” “怎么了廊宪?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵矾瘾,是天一觀的道長。 經(jīng)常有香客問我箭启,道長壕翩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任傅寡,我火速辦了婚禮放妈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荐操。我一直安慰自己芜抒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布托启。 她就那樣靜靜地躺著宅倒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屯耸。 梳的紋絲不亂的頭發(fā)上拐迁,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天蹭劈,我揣著相機(jī)與錄音,去河邊找鬼线召。 笑死铺韧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缓淹。 我是一名探鬼主播哈打,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼割卖!你這毒婦竟也來了前酿?” 一聲冷哼從身側(cè)響起患雏,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹏溯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淹仑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丙挽,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年匀借,在試婚紗的時候發(fā)現(xiàn)自己被綠了颜阐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡吓肋,死狀恐怖凳怨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情是鬼,我是刑警寧澤肤舞,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站均蜜,受9級特大地震影響李剖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囤耳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一篙顺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧充择,春花似錦德玫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铃剔,卻和暖如春撒桨,著一層夾襖步出監(jiān)牢的瞬間查刻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工凤类, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穗泵,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓谜疤,卻偏偏與公主長得像佃延,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夷磕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容