iOS常用設(shè)計模式總結(jié)(一)

設(shè)計模式大概分成三類:

1.創(chuàng)建型:單例設(shè)計模式吠式、抽象工廠設(shè)計模式

2.結(jié)構(gòu)型:MVC 模式茁彭、裝飾器模式总寒、適配器模式、外觀模式理肺、組合模式

3.行為型:責(zé)任鏈設(shè)計模式摄闸、觀察者設(shè)計模式,備忘錄設(shè)計模式妹萨、命令設(shè)計模式

MVC模式:

涉及到的三個角色如下:

Model:

模型保存應(yīng)用程序的數(shù)據(jù)年枕,定義了怎么去操作它。例如在本應(yīng)用中模型就是Album類乎完。

View:

視圖是模型的可視化表示以及用戶交互的控件熏兄;基本上來說,所有的UIView對象以及它的子類都屬于視圖囱怕。在本應(yīng)用中AlbumView代表了視圖霍弹。

Controller:

控制器是一個協(xié)調(diào)所有工作的中介者(Mediator)。它訪問模型中的數(shù)據(jù)并在視圖中展示它們娃弓,同時它們還監(jiān)聽事件和根據(jù)需要操作數(shù)據(jù)。你可以猜猜哪個類是控制器嗎岛宦?它正是:ViewController台丛。

MVC遵循以下的原則:

在理想的狀態(tài)下,視圖應(yīng)該和模型完全的分離砾肺。如果視圖不依賴某個實際的模型挽霉,那么視圖就可以被復(fù)用來展示不同模型的數(shù)據(jù)。


單例設(shè)計模式有如下特點:

1.單例設(shè)計模式確保對于一個給定的類只有一個實例存在变汪,這個實例有一個全局唯一的訪問點侠坎。

2.它通常采用延遲加載的方式在第一次用到實例的時候再去創(chuàng)建它。

[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager]裙盾,所有的這些方法都返回一個單例對象

單例模式實現(xiàn)步驟:

1.聲明一個靜態(tài)變量去保存類的實例实胸,確保它在類中的全局可用性。

2.聲明一個靜態(tài)變量dispatch_once_t ,它確保初始化器代碼只執(zhí)行一次

3.使用Grand Central Dispatch(GCD)執(zhí)行初始化LibraryAPI變量的block.這? 正是單例模式的關(guān)鍵:一旦類已經(jīng)被初始化番官,初始化器永遠(yuǎn)不會再被調(diào)用庐完。

下一次你調(diào)用sharedInstance的時候,dispatch_once塊中的代碼將不會執(zhí)行(因為它已經(jīng)被執(zhí)行了一次)徘熔,你將得到原先已經(jīng)初始化好的實例门躯。

外觀模式Facade:

特點:

1. 外觀模式針對復(fù)雜的子系統(tǒng)提供了單一的接口,不需要暴漏一些列的類和API給用戶酷师,你僅僅暴漏一個簡單統(tǒng)一的API讶凉。

2.使用者完全不需要關(guān)心背后的復(fù)雜性染乌。這個模式非常適合有一大堆很難使用或者理解的類的情況。

3.外觀模式解耦了使用系統(tǒng)的代碼和需要隱藏的接口和實現(xiàn)類懂讯。它也降低了外部代碼對內(nèi)部子系統(tǒng)的依賴性慕匠。當(dāng)隱藏在門面之后的類很容易發(fā)生變化的時候,此模式就很有用了域醇,因為當(dāng)背后的類發(fā)生變化的時候台谊,門面類始終保持了同樣的API。

應(yīng)用場景:

假如某個模塊需要對一些數(shù)據(jù)做展示譬挚,這些數(shù)據(jù)的來源可能是不同數(shù)據(jù)庫锅铅、可能是通過網(wǎng)絡(luò)請求返回,總之載入數(shù)據(jù)的過程及其復(fù)雜减宣,這時候可以合理運用外觀模式盐须,封裝復(fù)雜的數(shù)據(jù)加載處理過程,對外公開簡單的接口返回數(shù)據(jù)漆腌。


裝飾器(Decorator)模式

裝飾器模式在不修改原來代碼的情況下動態(tài)的給對象(而不是類)增加新的行為和職責(zé)贼邓,它通過一個對象包裝被裝飾對象的方法來修改類的行為,這種方法可以做為子類化的一種替代方法闷尿。相對而言這種方式比子類繼承更為靈活塑径。

在Objective-C中,存在兩種非常常見的實現(xiàn):Category(類別)和Delegation(委托)填具。

注意:如果方法與原來類的方法重名了统舀,或者與同樣的類(甚至它的父類)的其它的擴(kuò)展重名,那么運行期到底應(yīng)該調(diào)用哪個方法是未定義的劳景。當(dāng)你僅僅是在擴(kuò)展你自己寫的類時誉简,這沒什么問題,? 但是當(dāng)你在擴(kuò)展標(biāo)準(zhǔn)的Cocoa 或者Cocoa Touch類的時候盟广,它可能會導(dǎo)致嚴(yán)重的問題闷串。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筋量,隨后出現(xiàn)的幾起案子烹吵,更是在濱河造成了極大的恐慌,老刑警劉巖毛甲,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件年叮,死亡現(xiàn)場離奇詭異,居然都是意外死亡玻募,警方通過查閱死者的電腦和手機(jī)只损,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跃惫,你說我怎么就攤上這事叮叹。” “怎么了爆存?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蛉顽,是天一觀的道長。 經(jīng)常有香客問我先较,道長携冤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任闲勺,我火速辦了婚禮曾棕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菜循。我一直安慰自己翘地,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布癌幕。 她就那樣靜靜地躺著衙耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勺远。 梳的紋絲不亂的頭發(fā)上橙喘,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音谚中,去河邊找鬼渴杆。 笑死,一個胖子當(dāng)著我的面吹牛宪塔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播囊拜,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼某筐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冠跷?” 一聲冷哼從身側(cè)響起南誊,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜜托,沒想到半個月后抄囚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡橄务,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年幔托,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡重挑,死狀恐怖嗓化,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谬哀,我是刑警寧澤刺覆,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站史煎,受9級特大地震影響谦屑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篇梭,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一氢橙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧很洋,春花似錦充蓝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至协怒,卻和暖如春涝焙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕暇。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工仑撞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妖滔。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓隧哮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親座舍。 傳聞我的和親對象是個殘疾皇子沮翔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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