1. 程式人生 > >關於前陣子學習ios MVC設計模式的小結

關於前陣子學習ios MVC設計模式的小結

MVC模式是  Cocoa(Touch)的核心,其包含了一些基本的設計模式. 設計模式主要是運用面向物件特性程式設計的一些總結性的經驗. Cocoa MVC 模式包括 介面卡模式(委託Delegate就是介面卡模式).組合模式,命令模式,中介者模式,策略模式,觀察者模式.時間有限先只小結比較熟的三個模式,並講一下在Cocoa中的示例,你會發現很多Cocoa類庫遵照了很多之類的模式

1.組合模式是使用介面(協議)的優秀例子,它使物件和物件的組合能被一致性看待.類圖如下


Cocoa中UIView就是使用組合模式的例子,在一個手機應用上,手機螢幕上滿是UIView檢視或其派生類,它們是可以互相包含的,每一個檢視或其檢視的子類

都可以有0到多個子檢視.所有的這些檢視,都是UIView(這是多型了),不管是派生成UISlider(滑塊)還是UILabel(文字標籤)還是UITextField(文字輸入框) 都能按祖宗的型別UIView進行統一處理. 其中一個特性是參與到統一的響應者鏈(一致對待).

2.中介者模式,上類圖

只看類圖是難懂的,說明一下同事類,所謂同事類是一群相互引用的亂成一團麻的類,比如Controller們互相引用來進行檢視切換控制的流程,如下

經過中介者模式處理,就變成下面這樣子了:

是不是很清晰? 中介者引用了所有的同事類,負責它們的互動.自己不具有其它功能,僅僅負責那團亂麻,這就是面向物件的萬物皆物件的封裝,

也就是說我們把所有同事類間的檢視切換(或是其它的互動主題)的程式碼封裝到一個類中,這個類叫中介者.它本身可能是一個龐大的switch-case結構塊,這讓它成為龐然大物,儘管如此,也比散亂在各處類中的互動程式碼好多了!


3觀察者模式,上類圖

觀察者模式是一種釋出-訂閱模式,看類圖就知道,是兩個抽象類或介面之間的相互引用.其中一個介面當釋出者,它的每個實現ConcreteSubject都代表一個主題,每個主題ConcreteSubject擁有一個觀察者佇列,所有觀察者ConcreteObserver都是實現觀察者介面的人,它們自己接收到主題通知後,自己有不同的實現方式.這不影響主題實現類向它們傳送通知.只要有主題通知(一般通知Notification

是一個類),ConcreteSubject把佇列裡的物件統統呼叫update方法,可能需要傳一下Notification作為引數,就算通知完了,這是面向介面程式設計的好處.

在Cocoa中,NSNotificationCenter就是一個主題佇列維護者,任何物件都可以在這裡用引數定製相關主題,然後NSNotificationCenter在有情況就生成一個通知NSNotification(通知自己識別了主題),然後postNotification就完事了.

關於KVO,鍵值觀察也是這個模式的示例,想了解的去看蘋果的API,這裡不贅述了.