天真实现Objective中的装饰器模式
我从Cocoa Design Patterns一书中读到,装饰器模式被用在许多Cocoa
类中,包括NSAttributedString
(它不能从NSString
继承)。 我查看了NSAttributedString.m
一个实现,它已经完成了我的工作,但我很想知道SO上的任何人是否成功实现了这种模式,并愿意分享。
这些需求是根据这个装饰器模式引用进行调整的,由于Objective-C中没有抽象类, Component
和Decorator
应该足够类似于抽象类并服务于它们的原始目的(即,我不认为它们可以是协议,因为你必须能够做[super operation]
。
看到装饰器的一些实现,我会非常兴奋。
我用它在我的一个应用程序中,我有一个单元格的多个表示,我有一个单元格有一个边框,并有一个单元格有额外的按钮和一个单元格有纹理的图像我也需要改变他们点击的按钮
这是我使用的一些代码
//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];
链接地址: http://www.djcxy.com/p/10853.html
上一篇: Naive implementation of decorator pattern in Objective
下一篇: Determine memory usage of cached DOM elements in JavaScript?