IOS文章收集一群程序猿的秘密基地IT梦之队

三分钟了解类簇

2017-05-06  本文已影响86人  itzhaolei

简介:

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

实例说明

点击不同的事件,去实现不同的功能
\#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
\#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
#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地址

上一篇下一篇

猜你喜欢

热点阅读