三分钟了解类簇

作者: itzhaolei | 来源:发表于2017-05-06 10:28 被阅读86次

简介:

什么是类簇?有什么作用?
类簇是Foundation框架中广泛使用的设计模式。类簇将一些私有的、具体的子类组合在一个公共的、抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不减少功能的丰富性。

实例说明

  • 实现效果
点击不同的事件,去实现不同的功能
  • Demo结构


    结构图
  • 文件作用简介:

    • ViewController 事件区(发起事件的地方)
    • ZLManager 工厂类(用来生产对象)
    • DifferentActions 这个文件包内装载的是ZLManager的子类(对应着上述效果图的不同功能)
  • 事件区代码

\#import "ViewController.h"
\#import "ZLManager.h"
@interface ViewController ()
@end
@implementation ViewController
\- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
\- (IBAction)buttonAction:(UIButton *)sender {
    //在外面,只看到了这一句代码,但是在内部,分工明确,且灵活性高。
    [[ZLManager managerWithState:sender.tag] action];
}
@end
  • 工厂类代码
    • ZLManager.h
\#import <Foundation/Foundation.h>
typedef NS_OPTIONS(NSInteger, Selected) {
    ///中国人
    SelectedChinese = 1,
    ///韩国人
    SelectedSouthKoreans ,
    ///日本人
    SelectedJapanese ,
    ///机器人
    SelectedRobot
    ///待扩充
};
@interface ZLManager : NSObject
///根据一个状态,创建一个对应的对象,并用父类的指针指向这个对象
\+ (instancetype)managerWithState:(Selected)state;
///子类不同动作的相同方法(各自重写此方法实现不同的功能,至于哪个子类的方法会被调用,取决于managerWithState:这个方法返回的对象是谁)
\- (void)action;
@end
  • ZLManager.m
#import "ZLManager.h"
#import "ZLChinese.h"
#import "ZLSouthKoreans.h"
#import "ZLJapanese.h"
#import "ZLRobot.h"
@implementation ZLManager
///根据一个状态,创建一个对应的对象,并用父类的指针指向这个对象
\+ (instancetype)managerWithState:(Selected)state{
      return [[self allocWithState:state] init];
}
\+ (instancetype)allocWithState:(Selected)state{
      if ([self class] == [ZLManager class]) {
          if (state==SelectedChinese) {
              return [ZLChinese alloc];
          }else if (state==SelectedSouthKoreans){
              return [ZLSouthKoreans alloc];
          }else if (state==SelectedJapanese){
              return [ZLJapanese alloc];
          }else if (state==SelectedRobot){
              return [ZLRobot alloc];
          }else{
              ///待扩充
              return nil;
          }
        }else {
        return [super alloc];
      }
}
///如果子类有共同事件需要处理,可通过[super action]来处理,此方法会被调用
\- (void)action{
}
@end
  • 子类代码(所有子类等同)
#import "ZLChinese.h"
@implementation ZLChinese
///重写父类的动作
\- (void)action{
    //调用父类的方法,配置子类的相同事件,如果没有相同事件,则此方法可以省略不写;
    [super action];
    NSLog(@"中国人");
}
@end
  • 界面操作
    • 分别依次点击了韩国人、中国人、日本人、机器人
    • 控制面板输出
控制面板输出
写在最后:

可以看出,我们的工厂类对外、提供的方法简单暴力,在内、将事件处理的井井有条,且灵活性高,增删改查都有明确的位置,增加了代码的可读性、可拓展性……等等

另附:

githubDemo地址

相关文章

  • 三分钟了解类簇

    简介: 什么是类簇?有什么作用?类簇是Foundation框架中广泛使用的设计模式。类簇将一些私有的、具体的子类组...

  • 2021-iOS面试整理

    类 了解过类簇么?类簇的优势在哪里? 管理了一组隐藏在公共接口下的私有类,NSNumber,UIbutton,对外...

  • 类簇

    类簇(Class Clusters)是抽象工厂模式在iOS下的一种实现,Function中,很多常用类,如NSSt...

  • 类簇

    类簇在iOS中是一种非常实用的模式,例如:NSArray, NSDictionary等。 那么类簇有哪些特点了: ...

  • 类簇

    // 类簇 // 在 OC 中, init开头的初始化方法所做的和其他方法并没有很大不同,只是将 self 进行了...

  • 类簇

    首先需要了解一下iOS的 类簇 ,https://www.jianshu.com/p/3ae2f9589fae 我...

  • iOS开发设计模式之类簇

    本文试图探讨以下三个问题 什么是类簇 使用类簇有什么好处 类簇的具体应用 1. 什么是类簇 类簇的英文名是clas...

  • 关于类簇

    在ios中,比如NSString,NSArray, NSNumber 这些都是类簇,大概就是说,他们在alloc的...

  • iOS类簇

    IOS 类簇 类簇(class cluster)是一种设计模式,在Foundation Framework中被广泛...

  • iOS 类簇

    iOS 类簇 Person.h Person.m TestCode 打印结果2021-07-14 14:19:16...

网友评论

    本文标题:三分钟了解类簇

    本文链接:https://www.haomeiwen.com/subject/xxsetxtx.html