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

类簇是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.使用类簇时要完善开发文档,避免团队成员错误使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,037评论 25 709
  • 周末听了说话之道带读。期待好久了。 一直觉得自己在说话方面特别拘谨,害怕,甚至恐惧。不管是在现实中还是在网络。不管...
    嗨新新新阅读 1,558评论 0 0
  • 南洋精油按摩spa+星空海景浪漫晚餐 很舒服的SPA.全身放松,值得体验 海景早餐需要吃完饭后到外面的沙滩走走,才...
    广州闺蜜读书会阅读 2,299评论 0 0
  • 五月的风 在寂静的深夜 轻盈的来到身旁 欢颜 让爱摇曳在心房 爱在春末夏初时节 乘风飞翔 抑街头小巷 缘深缘浅 寻...
    晓霞初阳阅读 2,415评论 0 1
  • 卡之家爆英魂之刃AD项羽天赋宝石这样出装太最酷!相信大部分玩家都知道,英魂之刃游戏中项羽是很强的后期英雄,靠他上分...
    卡之家阅读 5,221评论 0 0

友情链接更多精彩内容