2011-09-23 30 views
0

我有一個實例化類層次結構的類。界面應該通過提供一個類的引用來隱藏所有的內部層次結構。 (中間級別的類的接口應該以相同的方式隱藏內部實現細節。)我在決定如何將接口參數向下傳遞到最低級別以及將狀態更改流向頂級時遇到一些困難。我想到的東西變得混亂。對於這種分層結構,什麼是合適的設計模式?

我已經看到黑板圖案的一些討論,但從我所看到的,它看起來是特設和平面的,而不是分層的。 (雖然平坦與分層可能並不重要)。

我有一個日曆視圖,子視圖UIView。層次結構包括一個頭類,一個網格類(多次實例化),一個tile類(多次實例化)以及一些輔助類。它基於Keith Lazuka在Objective C中的卡爾日曆。我決定根據自己的需求對其進行重組,並且希望在引入靈活性問題之前重新考慮這部分內容。

我的問題是在標題中。

+0

查看類集羣模式。 – Macmade

+0

感謝您的建議。我查看了Cocoa Design Patterns中的類集羣模式。如果我理解它是正確的,那麼對於我來說,它看起來像是子類型多態,其中層次結構的較低級別上的所有對象都具有取決於數據類型的行爲。我沒有看到這對所有具有不同行爲和滾動的對象層次結構有何幫助,但仍然對其行爲具有功能和參數依賴性。 – Jim

回答

0

我已經決定KVO(Key Value Observer)設計模式對從低層到高層冒泡狀態信息有意義。只有那些需要流動的狀態信息才能在每個相應的層中被觀察到。

在這個應用程序中,一個tapped tile事件被髮送給下一層(網格層)的觀察者,告訴它用戶已經選擇了一個日期,這是tile類的一個屬性。

在網格級別,它根據當前狀態和觀察者從瓦片收到的新信息更改其狀態。 (在我的日曆中,用戶可以通過選擇開始日期和結束日期來選擇日期範圍,並且可以繼續點擊切片來更改日期範圍選擇。)這種狀態在網格級別上的變化意味着開始和/或結束日期,所以更新NSDictionary屬性。

在日曆級別,觀察者會看到startDate/endDate字典更改。無論這個網格來自哪個網格(有兩個網格,一次只有一個網格處於活動狀態,平鋪和日曆不需要知道),日曆的開始和結束日期都會更新。

日曆是種植到應用程序的其他視圖之一的視圖,初始化爲顯示月份並具有選定的日期範圍(開始日期和結束日期)。信息從頂部向下流動,但是指向任何層的每個直接子視圖。這些子視圖負責保持子視圖的配置。我無需添加顯式添加委託方法或回調,並且簡化了從上到下的連接。連接只能位於層次結構中上方或下方的直接級別。

這可能看起來不多,因爲它看起來相當簡單。但是直到我花了一段時間思考它才得知。我希望它爲他人提供了一些自己的代碼的想法。我仍然想知道是否有其他建議迴應我的問題。