2012-06-08 10 views
7

Czytałem z książki Patterns Cocoa projekt że wzór dekorator jest stosowany w wielu Cocoa klasach, w tym NSAttributedString (które nie dziedziczą z NSString). I looked at an implementation NSAttributedString.m i to było ponad moją głową, ale chciałbym wiedzieć, czy ktokolwiek z SO z powodzeniem wdrożył ten wzorzec i jest gotów się nim podzielić.naiwna implementacja wzorca dekorator w Objective-C

Wymagania zostały zaadaptowane z this decorator pattern reference a ponieważ nie ma klasy abstrakcyjne w Objective-C, powinny być odpowiednio wystarczająco podobny do klas abstrakcyjnych Component i Decorator i służyć swój pierwotny cel (czyli nie sądzę, mogą być protokoły , bo trzeba być w stanie zrobić [super operation].

Byłbym naprawdę wstrząśnięty, aby zobaczyć niektóre implementacje dekoratora.

Odpowiedz

3

użyłem go w jednym z mojej aplikacji, gdzie miałem wielu reprezentacji komórce mam komórkę, która ma granicę i komórkę, która miała dodatkowe Musiałem także przyciski i komórka, która miała teksturą obrazu, aby zmienić je na kliknięciem

Oto kod I używany

//CustomCell.h 
@interface CustomCell : UIView 

//CustomCell.m 
@implementation CustomCell 

- (void)drawRect:(CGRect)rect 
{ 
    //Draw the normal images on the cell 
} 

@end 

A dla niestandardowych komórki z granicy

//CellWithBorder.h 
@interface CellWithBorder : CustomCell 
{ 
    CustomCell *aCell; 
} 

//CellWithBorder.m 
@implementation CellWithBorder 

- (void)drawRect:(CGRect)rect 
{ 
    //Draw the border 
    //inset the rect to draw the original cell 
    CGRect insetRect = CGRectInset(rect, 10, 10); 
    [aCell drawRect:insetRect]; 
} 

teraz moim zdaniem regulatora, zrobiłbym następujące

CustomCell *cell = [[CustomCell alloc] init]; 
CellWithBorder *cellWithBorder = [[CellWithBorder alloc] initWithCell:cell]; 

Jeśli później chciałem przełączyć się do innej komórki i zrobi

CellWithTexture *cellWithBorder = [[CellWithTexture alloc] initWithCell:cellWithBorder.cell]; 
+0

@RobNapier Nie jest to dekorator, dekorator jest „podklasy”, że „ma” odniesienie do nadrzędnej, dekorator także muszą spełniać warunki superclass interface –

+0

Masz rację; Źle odczytałem kod. –

+0

@RobNapier :), uwielbiam twoją książkę –