码迷,mamicode.com
首页 > 移动开发 > 详细

iOS设计模式 - 组合

时间:2015-10-20 22:44:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

iOS设计模式 - 组合

技术分享

 

原理图

技术分享

 

说明

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

 

源码

https://github.com/YouXianMing/CompositePattern

//
//  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

 

细节

技术分享

 

iOS设计模式 - 组合

标签:

原文地址:http://www.cnblogs.com/YouXianMing/p/4894859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!