設(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)重的問題闷串。