iOS设计模式 - 组合
原理图
说明
将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。
源码
https://github.com/YouXianMing/iOS-Design-Patterns
//
// File.h
// CompositePattern
//
// Created by YouXianMing on 15/10/20.
// Copyright © 2015年 ZiPeiYi. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum : NSUInteger {
kFolder, // 文件夹
kFile, // 文件
} FileType;
@interface File : NSObject
#pragma mark - 基本属性
/**
* 文件类型
*/
@property (nonatomic) FileType fileType;
/**
* 文件夹或者文件的名字
*/
@property (nonatomic, strong) NSString *name;
/**
* 添加文件
*
* @param file 文件
*/
- (void)add:(File *)file;
/**
* 所有文件
*
* @return 文件的文件夹
*/
- (NSArray <File *> *)files;
#pragma mark - 便利构造器
/**
* 返回创建出来的文件夹或者文件
*
* @param type 文件类型
* @param name 文件名字
*
* @return 创建出来的实例对象
*/
+ (instancetype)createWithFileType:(FileType)type name:(NSString *)name;
@end
//
// File.m
// CompositePattern
//
// Created by YouXianMing on 15/10/20.
// Copyright © 2015年 ZiPeiYi. All rights reserved.
//
#import "File.h"
@interface File ()
@property (nonatomic, strong) NSMutableArray <File *> *filesArray;
@end
@implementation File
- (instancetype)init {
self = [super init];
if (self) {
self.filesArray = [NSMutableArray array];
}
return self;
}
- (void)add:(File *)file {
[self.filesArray addObject:file];
}
- (NSArray <File *> *)files {
return self.filesArray;
}
+ (instancetype)createWithFileType:(FileType)type name:(NSString *)name {
File *file = [[[self class] alloc] init];
file.fileType = type;
file.name = name;
return file;
}
@end
细节