组合模式的解析-iOS

栏目: IOS · 发布时间: 5年前

内容简介:1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS2、建造者模式的解析-iOS3、单例模式的解析-iOS

组合模式的解析-iOS

其他 设计模式 的介绍

1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS 

2、建造者模式的解析-iOS 

3、单例模式的解析-iOS 

4、原型模式的解析-iOS 

5、代理模式的解析-iOS 

6、适配器模式的解析-iOS 

7、装饰器模式的解析-iOS 

8、外观模式的解析-iOS 

9、桥接模式的解析-iOS 

10、组合模式的解析-iOS

概率描述

组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

实用场景

1.你想表示对象的部分-整体层次结构。 

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。百度百科 

如:文件夹的管理,树形结构的东西。

案例解析

我们数据结构里面学习的二叉树,就是部分-整体的模式,就是一个组合模式的结构。 

还有我们的平常工作的公司也是一个组合模式,比如,每个公司都是有不同的部门组合而成的,而每个部门是由不同的人组合而成的,这种结构也是“部分-整体”的层次结构。

公司的原型图如下: 


组合模式的解析-iOS

代码如下: 

先看我们的部分代码–就是我们的人员代码

//.h文件

#import

@interface Person : NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *age;

@end



//.m文件

#import "Person.h"



@implementation Person



@end

部门的代码:

//.h文件

#import

#import "Person.h"



typedef enum {

recruitFunction,//招聘

exploitFunction,//开发

financeFunction,//财务

operationAndMaintenanceFunction,//运维



}functionType;



@interface Department : NSObject

@property(nonatomic,copy)NSString *departmentName;

@property(nonatomic,assign)functionType functions;



/*

*添加人员

*/


-(void)addPer:(Person *)person;

/*

*移除人员

*/


-(void)removePer:(Person *)person;



@end

//.m文件

#import "Department.h"

#import "Person.h"



@interface Department ()

@property (nonatomic,copy)NSMutableArray *perArray;

@end



@implementation Department

- (instancetype)init

{

self = [super init];

if (self) {

_perArray = [NSMutableArray arrayWithCapacity:10];

}

return self;

}

-(void)addPer:(Person *)person{

[_perArray addObject:person];

}

-(void)removePer:(Person *)person{

[_perArray removeObject:person];

}

-(NSString *)description{

for (Person*per in _perArray) {

NSLog(@"%@有 %@",self.departmentName,per.name);

}

return @"";

}

@end

公司的代码

//.h文件

#import



@interface Company : NSObject



@end

//.m文件

#import "Company.h"

#import "Person.h"

#import "Department.h"





@implementation Company

- (instancetype)init

{

self = [super init];

if (self) {

[self createCompany];

}

return self;

}

-(void)createCompany{

Department *departmentOne = [[Department alloc]init];

departmentOne.departmentName = @"招聘部门";

departmentOne.functions = recruitFunction;

for (int i = 0; i<2; i++) {

Person *per = [[Person alloc]init];

per.name = [NSString stringWithFormat:@"人员%d",i+1];

[departmentOne addPer:per];

}

[departmentOne description];



Department *departmentTwo = [[Department alloc]init];

departmentTwo.departmentName = @"研发部门";

departmentTwo.functions = recruitFunction;

for (int i = 2; i<5; i++) {

Person *per = [[Person alloc]init];

per.name = [NSString stringWithFormat:@"人员%d",i+1];

[departmentTwo addPer:per];

}

[departmentTwo description];



Department *departmentThree = [[Department alloc]init];

departmentThree.departmentName = @"财务部门";

departmentThree.functions = recruitFunction;

for (int i = 5; i<6; i++) {

Person *per = [[Person alloc]init];

per.name = [NSString stringWithFormat:@"人员%d",i+1];

[departmentThree addPer:per];

}

[departmentThree description];





Department *departmentFour = [[Department alloc]init];

departmentFour.departmentName = @"财务部门";

departmentFour.functions = recruitFunction;

for (int i = 6; i<8; i++) {

Person *per = [[Person alloc]init];

per.name = [NSString stringWithFormat:@"人员%d",i+1];

[departmentFour addPer:per];

}

[departmentFour description];



}

@end

调用公司的代码

    /************** 组合模式*************************/



    Company *company = [[Company alloc]init];

命令行的结果

2018-07-03 17:19:23.139459+0800 DesignDemo[6792:179813] 招聘部门有 人员1

2018-07-03 17:19:23.139646+0800 DesignDemo[6792:179813] 招聘部门有 人员2

2018-07-03 17:19:23.140479+0800 DesignDemo[6792:179813] 研发部门有 人员3

2018-07-03 17:19:23.140643+0800 DesignDemo[6792:179813] 研发部门有 人员4

2018-07-03 17:19:23.140780+0800 DesignDemo[6792:179813] 研发部门有 人员5

2018-07-03 17:19:23.141178+0800 DesignDemo[6792:179813] 财务部门有 人员6

2018-07-03 17:19:23.141612+0800 DesignDemo[6792:179813] 财务部门有 人员7

2018-07-03 17:19:23.141917+0800 DesignDemo[6792:179813] 财务部门有 人员8

优缺点

优点: 

1、组合模式解耦了程序和各元素内部结构,可以把复杂的程序像单个接口一样处理该程序 

2、高层模块调用简单 

3、节点自由增加 

缺点: 

1、违反了依赖倒置原则,而接口不应该依赖于具体的实现类。比如树形的结构的时候,其叶子和树叶的声明都是实现类。

总结

如果有写的不正确或者侵权的,希望大家给我提出来,我会及时修改。谢谢大家。

--------------------- 

作者:小雅_yyq 

原文:https://blog.csdn.net/u014644610/article/details/80902099 


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

安全之美

安全之美

Andy Oram、John Viega / 徐 波、沈晓斌 / 机械工业出版社华章公司 / 2011-4-28 / 65.00元

“这本深思熟虑的论文集(《安全之美》)帮助读者摆脱安全领域闪烁着欺骗光芒的心理恐惧,转而欣赏安全的微妙美感。本书描述了安全的阴和阳,以及引人注目的破坏性和闪亮光辉的建设者之间剑拔弩张的气氛。” ——Gary McGraw,Cigital公司CTO,《Software Security》及其他9本书的作者 大多数人不会太关注安全问题,直到他们的个人或商业系统受到攻击。这种发人深省的现象证......一起来看看 《安全之美》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具