iOS设计模式 - 组合

简介:

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

细节


目录
相关文章
|
8月前
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
234 0
|
8月前
|
设计模式 搜索推荐 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
507 1
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
|
8月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
272 0
|
8月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
410 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
|
8月前
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
250 0
|
8月前
|
设计模式 iOS开发 UED
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(4)
249 0
|
8月前
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(5)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(5)
243 0
|
设计模式 测试技术 API
淘宝iOS扫一扫架构升级 - 设计模式的应用
本文在“扫一扫功能的不断迭代,基于设计模式的基本原则,逐步采用设计模式思想进行代码和架构优化”的背景下,对设计模式在扫一扫中新的应用进行了总结。
188 0
淘宝iOS扫一扫架构升级 - 设计模式的应用
|
设计模式 API 数据库
iOS 限制按钮的点击频率(Target-Action设计模式的运用)
iOS 限制按钮的点击频率(Target-Action设计模式的运用)
239 0
iOS 限制按钮的点击频率(Target-Action设计模式的运用)
|
设计模式 存储 安全
iOS Target-Action设计模式的运用【修订】
iOS Target-Action设计模式的运用【修订】
123 0
iOS Target-Action设计模式的运用【修订】