iOS开发实用技术iOS开发学习iOS开发

iOS开发设计模式之类簇模式

2016-06-06  本文已影响343人  PandaXiong

类簇是objective-C系统框架普遍使用的模式,可以隐藏抽象基类背后的实现细节。比如创建按钮时调用的

+ (instancetype)buttonWithType:(UIButtonType)buttonType;

这个方法创建的对象的类型取决于传入的按钮类型buttonType。返回的对象都继承于同一个基类UIButton
当各个子类在外部表现相同,内部实现不同时,我们就可以使用类簇模式去实现它。这样做我们无需使用对应的子类,只需要使用基类即可。

创建类簇

举个例子,我们要写个刷新控件,实现下拉刷新,上拉加载功能。
定义抽象基类

typedef enum {
    RefreshStateBeginRefreshing,//开始刷新
    RefreshStateEndRefreshing//结束刷新
    
} RefreshState;

/**
 控件类型
 */
typedef enum {
    RefreshHeaderType,
    RefreshFooterType
} RefreshViewType;

@interface XZHRefreshView : UIView

- (void)addRefreshTarget:(id)target action:(SEL)action forRefreshState:(RefreshState)state;

+ (XZHRefreshView *)refreshViewWithType:(RefreshViewType)type;

@end


@implementation XZHRefreshView

+ (XZHRefreshView *)refreshViewWithType:(RefreshViewType)type {
    if (type == RefreshHeaderType) {
        return [XZHRefreshHeaderView header];
    } else if (type == RefreshFooterType) {
        return [XZHRefreshFooterView footer];
    } else {
        return nil;
    }
}
- (void)addRefreshTarget:(id)target action:(SEL)action forRefreshState:(RefreshState)state {
    //子类实现
}
@end

每个实体子类,都是继承于基类:

@interface XZHRefreshHeaderView : XZHRefreshView

@end

@implementation XZHRefreshView

- (void)addRefreshTarget:(id)target action:(SEL)action forRefreshState:(RefreshState)state {
    //code
}
@end

OC语言不能指出哪个基类是『抽象的』。开发者需要在文档中写明类的用法。基类没有init方法,不应该由使用者直接创建。

注意事项

1.所有子类应该继承类簇的抽象基类
2.子类应该覆写父类需要覆写的方法。
3.使用类簇时要完善开发文档,避免团队成员错误使用。

上一篇 下一篇

猜你喜欢

热点阅读