Cocoa中的設計模式(MVC模式\委託模式\鍵值觀察模式)


Cocoa是圍繞着一系列設計模式所創建的,其目的是讓開發者的工作更加協調和更加高效。


Cocoa中三個關鍵的模式

      1.模型-視圖-控制器(MVC:model-view-controller)模式:
            Cocoa和Cocoa Touch 很大部分都是根據它構建的;
      2.委託(delegate)模式:
            它允許你的代碼和Cocoa可以在“決定什麼代碼被誰運行”上高度靈活;
      3.鍵值觀察(key-value observing)模式:

            它允許你的代碼可以在不對其他對象進行檢查的情況下觀察到其他對象的變更。


MVC模式

      模型-視圖-控制器設計模式是Cocoa中的基礎設計模式之一。它將所有的對象都歸結爲三類:模型、視圖、控制器(並因此得名)。
      -模型(Model)是那些包含數據或者協助存儲、管理,以及給其他對象傳遞數據的對象。模型可以簡單到只是一個NSString,也可以複雜到是整個數據庫。它們的目的是存儲數據並提供數據給其他對象。一旦它們將數據給了其它對象後,便不再關心數據的變化,唯一關心的是管理數據如何存儲。
      -視圖(View)是直接與用戶交互、給用戶提供信息和接收輸入信息的對象。視圖並不管理它們所顯示的數據,它們只是將數據展示給用戶。同時,視圖在用戶與對象交互時還負責發送通知給對象。如同模型與數據間一樣,視圖同樣不關心接下來數據會發生什麼,在通知完應用程序中其餘部分後,其職責應終結。
      -控制器(Controller)是作爲模型與視圖間媒介的對象,包含了應用程序中大量的稱爲“業務邏輯”的東西。實際邏輯定義了應用程序是什麼以及它如何響應用戶輸入。最基本的,控制器負責從模型中獲取信息然後提供給視圖,它同樣負責在得到視圖通知用戶與視圖有交互時將信息提供給模型。

      爲了給模型-視圖-控制器模式一個實際例證,設想一個簡單的文本編輯器。在本示例中,應用程序從磁盤中加載一個文本文件,然後在一個文本框中向用戶呈現其內容。用戶在文本框中進行修改,然後保存這些修改回到磁盤。
      我們將此應用程序分解爲MVC對象:
      -其模型是一個負責從磁盤加載文本文件及將其寫回磁盤的對象。它同樣負責以NSString形式提供文本給任何請求它的對象。
      -其視圖是文本框,它向另一個對象請求要顯示的NSString,然後顯示其文本。它同樣接收來自用戶的鍵盤輸入,無論何時用戶用鍵盤輸入,它都會通知其他對象:文本已經被修改。當用戶告訴它要保存修改時,它同樣能再告訴其他對象。
      -其控制器是負責指示模型對象從磁盤加載文件,以及傳遞文本給視圖的對象。當文本被更改時它接收來自視圖的更新,然後將這些改變傳遞給模型。最後,它能夠被視圖告知用戶已經請求保存修改;那時,它只是指示模型去完成將文件寫入磁盤的實際操作。

      將應用程序分解成這些職責領域,使得修改應用程序更加容易。

      比如,如果開發者決定在應用的下一個版本添加在文本被修改時上傳該文本文件到互聯網的功能,必須修改的僅僅是模型類,控制器可以保持原有的內容,而試圖則不需要更改。
      同樣的,清晰地定義哪些對象負責哪些特定的功能,使得在保持項目中清晰的架構同時修改應用更加容易。如果開發者決定添加一個拼寫檢查的功能到應用程序,相應的代碼顯然要添加到控制器中,因爲並不涉及文本如何呈現給用戶或在磁盤中的存儲(當然你可以添加一些功能到視圖,使得它可以指示哪些詞拼寫錯誤,但大部分代碼將需要添加到控制器中)。

委託

      ……待補充……



鍵-值觀察

      MVC模式很大地依賴控制器在模型和視圖相互間提供及時更新。要達到此目的的一種方式是定期地檢查模型並詢問它是否有任何更改,如果確實有的話,便向視圖提供信息更新,此方式一般稱爲輪詢。然而,這種輪詢的方式,在模型不經常變更時效率低下,資源浪費,而恰恰在OS X和iOS應用程序中的大多數情況,模型通常是不經常變更的。爲了能更高效地響應更改,Cocoa實現了一種稱爲鍵-值觀察(key-value observing)的設計模式。
      在此模式中,對象可以註冊爲關於其他對象其屬性的觀察者。當那些其他對象更改了所被觀察的屬性時,那些觀察者會得到通知。
      設計程序,當希望分離視圖和對象模型時,鍵-值觀察會變得很重要。

      ……更詳細的介紹有待補充……


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章