Composite物件,是子類化Cluster class來達成某些客製化需求的操作的一種,以下我配著某種粒子來說明,可以參考官方文件。
比方說我要一個array,在他要被修改時,我會先基於某些標準去作檢查,然後才決定要不要修改,這時我會用到一個Mutable array,於是我可以採用Composite物件的設計概念去操作。
作法是這樣,你建立一個NSMutableArray的子類別,比方說叫做ValidatingArray,這是為了我們其實是想延續使用 NSMutableArray 裡面的一些方法,避免撰寫重複的方法,比方說count,在我們的code內可以直接呼叫NSMutableArray的count來用。另外,我們還會宣告一個NSMutableArray型別的實例變數embeddedArray,這是我們會操作的物件,我們就是要一個NSMutableArray物件,只是滿足我們要的一些邏輯。
由於 embeddedArray 封裝在 ValidatingArray 裡面,雖然我們傳送的訊息是要對 embeddedArray 作操作,但由於 ValidatingArray 的關係,我們可以讓 embeddedArray 物件間接的被操作到,舉最簡單的例子好了:
比方說我們在某個ClassA裡面有一行程式碼:
ValidatingArray *vArray = [[ValidatingArray alloc] init];
[vArray count];
我們對 ValidatingArray 型別的 vArray 傳送訊息 count ,這訊息宣告在 ValidatingArray 的標頭檔內,然後我們可能這樣改寫他:
- (unsigned) count
{
// 作一些我們想要的事情,這邊是你追加的功能
return [embedded count]; // 你可以依照你前面計算的東西回傳你要的結果
}
這種作法跟完全的subclassing差很多,那種作法可能要完全覆寫掉許多的原生方法,但這邊我們使用了原生方法來簡化了可能會很繁雜的程式碼,因為我們實際上是要對 NSMutableArray 物件進行操作,只是多一些額外的需求而已,因此宣告一個NSMutableArray型別的變數,然後在客製化的物件裡面去操作它做到我們想要的事情。
比方說我要一個array,在他要被修改時,我會先基於某些標準去作檢查,然後才決定要不要修改,這時我會用到一個Mutable array,於是我可以採用Composite物件的設計概念去操作。
作法是這樣,你建立一個NSMutableArray的子類別,比方說叫做ValidatingArray,這是為了我們其實是想延續使用 NSMutableArray 裡面的一些方法,避免撰寫重複的方法,比方說count,在我們的code內可以直接呼叫NSMutableArray的count來用。另外,我們還會宣告一個NSMutableArray型別的實例變數embeddedArray,這是我們會操作的物件,我們就是要一個NSMutableArray物件,只是滿足我們要的一些邏輯。
由於 embeddedArray 封裝在 ValidatingArray 裡面,雖然我們傳送的訊息是要對 embeddedArray 作操作,但由於 ValidatingArray 的關係,我們可以讓 embeddedArray 物件間接的被操作到,舉最簡單的例子好了:
比方說我們在某個ClassA裡面有一行程式碼:
ValidatingArray *vArray = [[ValidatingArray alloc] init];
[vArray count];
我們對 ValidatingArray 型別的 vArray 傳送訊息 count ,這訊息宣告在 ValidatingArray 的標頭檔內,然後我們可能這樣改寫他:
- (unsigned) count
{
// 作一些我們想要的事情,這邊是你追加的功能
return [embedded count]; // 你可以依照你前面計算的東西回傳你要的結果
}
這種作法跟完全的subclassing差很多,那種作法可能要完全覆寫掉許多的原生方法,但這邊我們使用了原生方法來簡化了可能會很繁雜的程式碼,因為我們實際上是要對 NSMutableArray 物件進行操作,只是多一些額外的需求而已,因此宣告一個NSMutableArray型別的變數,然後在客製化的物件裡面去操作它做到我們想要的事情。
留言
張貼留言