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

细节

最新文章

  1. 自定义RadioButton样式
  2. OpenGL ES(一.概念)
  3. zend studio 常用快捷键
  4. javaScript DOM JQuery AJAX
  5. 【linux】Ubuntu 14.04 smba服务器的配置
  6. sql常识-Alias
  7. struts2.3.15.1 中jsp:include与jsp:forward的用法
  8. java代理的深入浅出(二)-CGLIB
  9. redis(1)
  10. 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest I Lottery
  11. Java集合框架体系JCF
  12. HAOI2019+十二省联考 游记
  13. 基本数据类型转String,String转基本数据类型
  14. linux配置防火墙,开启端口
  15. 【Delphi】基于状态机的串口通信
  16. django-聚合操作
  17. Android 多图,大图内存优化
  18. linux 命令行 执行 php
  19. 架构实战项目心得(八):dubbo知识的整理
  20. Java8 Lambda表达式实战之方法引用(一)

热门文章

  1. Spring MVC 实现web Socket向前端实时推送数据
  2. protocol buffer开发指南
  3. 机器学习--boosting家族之Adaboost算法
  4. java-jdk7-forkjoin异常返回
  5. Nodejs学习笔记(三)—模块
  6. Vue双向绑定的关键:Object.defineProperty()
  7. [转]9.2.3 .net core 通过TagHelper封装控件
  8. 基于asp.net mvc的近乎产品开发培训课程(第三讲)
  9. XCode 添加自定义framework运行时出现dyld: Library not loaded的解决方法
  10. Win10+Ubuntu双系统安装