iOS设计模式 - 组合

iOS设计模式 - 组合

 

原理图

 

说明

将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。

 

 

复制代码
//
//  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
复制代码

 

细节

posted on 2017-04-01 17:26  ming1025  阅读(133)  评论(0编辑  收藏  举报