設計模式大概分成三類:
1.創建型:單例設計模式、抽象工廠設計模式
2.結構型:MVC 模式、裝飾器模式、適配器模式、外觀模式、組合模式
3.行為型:責任鏈設計模式、觀察者設計模式,備忘錄設計模式、命令設計模式
MVC模式:
涉及到的三個角色如下:
Model:
模型保存應用程序的數據,定義了怎么去操作它。例如在本應用中模型就是Album類。
View:
視圖是模型的可視化表示以及用戶交互的控件;基本上來說,所有的UIView對象以及它的子類都屬于視圖。在本應用中AlbumView代表了視圖。
Controller:
控制器是一個協調所有工作的中介者(Mediator)。它訪問模型中的數據并在視圖中展示它們,同時它們還監聽事件和根據需要操作數據。你可以猜猜哪個類是控制器嗎?它正是:ViewController。
MVC遵循以下的原則:
在理想的狀態下,視圖應該和模型完全的分離。如果視圖不依賴某個實際的模型,那么視圖就可以被復用來展示不同模型的數據。
單例設計模式有如下特點:
1.單例設計模式確保對于一個給定的類只有一個實例存在,這個實例有一個全局唯一的訪問點。
2.它通常采用延遲加載的方式在第一次用到實例的時候再去創建它。
[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的這些方法都返回一個單例對象
單例模式實現步驟:
1.聲明一個靜態變量去保存類的實例,確保它在類中的全局可用性。
2.聲明一個靜態變量dispatch_once_t ,它確保初始化器代碼只執行一次
3.使用Grand Central Dispatch(GCD)執行初始化LibraryAPI變量的block.這? 正是單例模式的關鍵:一旦類已經被初始化,初始化器永遠不會再被調用。
下一次你調用sharedInstance的時候,dispatch_once塊中的代碼將不會執行(因為它已經被執行了一次),你將得到原先已經初始化好的實例。
外觀模式Facade:
特點:
1. 外觀模式針對復雜的子系統提供了單一的接口,不需要暴漏一些列的類和API給用戶,你僅僅暴漏一個簡單統一的API。
2.使用者完全不需要關心背后的復雜性。這個模式非常適合有一大堆很難使用或者理解的類的情況。
3.外觀模式解耦了使用系統的代碼和需要隱藏的接口和實現類。它也降低了外部代碼對內部子系統的依賴性。當隱藏在門面之后的類很容易發生變化的時候,此模式就很有用了,因為當背后的類發生變化的時候,門面類始終保持了同樣的API。
應用場景:
假如某個模塊需要對一些數據做展示,這些數據的來源可能是不同數據庫、可能是通過網絡請求返回,總之載入數據的過程及其復雜,這時候可以合理運用外觀模式,封裝復雜的數據加載處理過程,對外公開簡單的接口返回數據。
裝飾器(Decorator)模式
裝飾器模式在不修改原來代碼的情況下動態的給對象(而不是類)增加新的行為和職責,它通過一個對象包裝被裝飾對象的方法來修改類的行為,這種方法可以做為子類化的一種替代方法。相對而言這種方式比子類繼承更為靈活。
在Objective-C中,存在兩種非常常見的實現:Category(類別)和Delegation(委托)。
注意:如果方法與原來類的方法重名了,或者與同樣的類(甚至它的父類)的其它的擴展重名,那么運行期到底應該調用哪個方法是未定義的。當你僅僅是在擴展你自己寫的類時,這沒什么問題,? 但是當你在擴展標準的Cocoa 或者Cocoa Touch類的時候,它可能會導致嚴重的問題。