我从 Cocoa设计模式一书中读到,装饰器模式在许多Cocoa
类中使用,包括NSAttributedString
(不继承自NSString
})。我looked at an implementation NSAttributedString.m
这是我的头脑,但我很想知道SO上是否有人成功实施了这种模式而他们愿意分享。
要求改编自this decorator pattern reference,由于Objective-C中没有抽象类,Component
和Decorator
应该足够相似,足以抽象类并满足其原始目的(即我不认为它们可以是协议,因为你必须能够[super operation]
。
看到你的一些装饰器实现,我真的很激动。
答案 0 :(得分:3)
我在我的应用程序中使用它,其中我有一个单元格的多个表示 我有一个有边框的单元格,一个有额外按钮的单元格和一个有纹理图像的单元格 我还需要点击按钮
来更改它们以下是我使用的一些代码
//CustomCell.h
@interface CustomCell : UIView
//CustomCell.m
@implementation CustomCell
- (void)drawRect:(CGRect)rect
{
//Draw the normal images on the cell
}
@end
对于带边框的自定义单元格
//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];
}
现在在我的视图控制器中,我会执行以下操作
CustomCell *cell = [[CustomCell alloc] init];
CellWithBorder *cellWithBorder = [[CellWithBorder alloc] initWithCell:cell];
如果以后我想切换到另一个单元格我会做
CellWithTexture *cellWithBorder = [[CellWithTexture alloc] initWithCell:cellWithBorder.cell];