Шаблон декоратора в Objective-C

Я думал об использовании шаблона декоратора для расширения функциональности UIKit класс. Проблема, с которой я столкнулся, состоит в том, что из примеров, которые я видел на других языках, шаблон заставляет меня дублировать интерфейс декорированного объекта. Вот как я бы увидел реализацию шаблона:

// Inheritance used for compile time check only
@interface UIScrollViewDecorator : UIScrollView
{
    UIScrollview *decoratedScrollView;
}

- (id)initWithScrollView:(UISCrollView*)scrollView;

@end

@implementation UIScrollViewDecorator

- (id)initWithScrollView:(UISCrollView*)scrollView
{
    self = [super init];
    if(self != nil)
    {
        decoratedScrollView = [scrollView retain];
        // maybe set up some custom controls on decoratedScrollView
    }
}

// all methods for UIScrollView need to be manually passed to the decorated object
//   -- this is the problem
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
{
    // use "overwritten methods" to mess with the input for the decorated scroll view
    // most of the time though I have no need to make any adjustments here; I still need
    // to pass all these messages through so that outside users can interact with me just
    // like with a real UIScrollView
    [decoratedScrollView scrollRectToVisible:rect animated:animated];
}

@end

Итак, чтобы подвести итог, проблема заключается в дублировании метода декорированного объекта, даже когда мне не нужно там ничего менять. Есть ли более простой способ передать те методы, которые мне не нужно «перезаписывать»? Могу ли я использовать для этого что-то вроде NSProxy?

РЕДАКТИРОВАТЬ: Это стало для меня в основном теоретической проблемой, так как я понял, что шаблон декоратора - не то, что мне нужно для решения моей реальной проблемы. Однако, поскольку в будущем я, возможно, снова им воспользуюсь, мне все еще очень интересны ваши ответы.

9
задан Mihai Damian 30 November 2010 в 10:40
поделиться