2012-06-08 7 views
7

He leído el libro de los patrones de diseño cacao que el patrón decorador se utiliza en muchas clases, incluyendo CocoaNSAttributedString (que no hereda de NSString). I looked at an implementation NSAttributedString.m y estaba por encima de mi cabeza, pero me gustaría saber si alguien en SO ha implementado con éxito este patrón Y están dispuestos a compartir.aplicación ingenua de Decorator en Objective-C

Los requisitos son una adaptación de this decorator pattern reference y puesto que no hay clases abstractas en Objective-C, el Component y Decorator deben estar adecuadamente lo suficientemente similares a las clases abstractas y sirven a su propósito original (es decir, no creo que puedan existir protocolos , porque hay que ser capaz de hacer [super operation].

estaría muy feliz de ver algunos de sus implementaciones de decorador.

Respuesta

3

lo usé en una de mi aplicación donde tuve la representación múltiple de una célula tengo una celda que tenía un borde, y una celda que tenía una botones y una celda que tenía una imagen de textura que también tenían que cambiarlos a un clic de un botón

Aquí es una parte del código que utilicé

//CustomCell.h 
@interface CustomCell : UIView 

//CustomCell.m 
@implementation CustomCell 

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

@end 

Y por celda personalizado con la frontera

//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]; 
} 

Ahora en mi controlador de vista, me gustaría hacer la siguiente

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

Si más adelante que quería cambiar a otra célula que haría

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

@RobNapier No, esto es decorador, decorador es una "subclase" que "tiene una" referencia a la superclase, decorador también deben ajustarse a las interfaz de superclase –

+0

Tienes razón; Estaba malinterpretando el código. –

+0

@RobNapier :), amo tu libro por cierto –

Cuestiones relacionadas