iOS Objective C--组合模式
2013-09-22 14:25
330 查看
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式的适用场合是,一般当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中地所有对象时,就应该考虑使用组
合模式了。组合模式定义了基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,这样,在客户代码中,任何使用到基本对象的地方都可以使用组合对象了。说了这么多,其实,组合模式就是让客户可以一致地使用组合结构和单个对象。那么,下面还是给出类结构图,想必大家一看就明白了。
上图中类之间的关系基本可以类比为一棵树的关系。有根(Component)、有枝节点(Composite)、有叶子节点(Leaf)。逻辑很清晰,结构也比较简单。其实相当于叶子节点(Leaf)和枝节点(Composite)都继承自根节点(Component)。好的,下面给出简单的代码实现。
ComComponents类接口 //对应图中的Component
ComComponents类实现
Leaf类接口
Leaf类实现
Composite类接口
Composite类实现
Main方法调用
好啦,组合模式结构还算简单,关键还是活学活用啊,这个才是真难啊!
转自:ww.ohcoder.com
组合模式的适用场合是,一般当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中地所有对象时,就应该考虑使用组
合模式了。组合模式定义了基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,这样,在客户代码中,任何使用到基本对象的地方都可以使用组合对象了。说了这么多,其实,组合模式就是让客户可以一致地使用组合结构和单个对象。那么,下面还是给出类结构图,想必大家一看就明白了。
上图中类之间的关系基本可以类比为一棵树的关系。有根(Component)、有枝节点(Composite)、有叶子节点(Leaf)。逻辑很清晰,结构也比较简单。其实相当于叶子节点(Leaf)和枝节点(Composite)都继承自根节点(Component)。好的,下面给出简单的代码实现。
ComComponents类接口 //对应图中的Component
1 2 3 4 5 6 7 8 9 10 | [code]#import @interface ComComponents:NSObject{ NSString *name; } -(ComComponents*)MyInit:(NSString*)myName; -(void)Add:(ComComponents*)c; -(void)Remove:(ComComponents*)c; -(void)Display:(int)depth; @end [/code] |
1 2 3 4 5 6 7 8 9 1011 | [code]#import "ComComponents.h" @implementation ComComponents -(ComComponents*)MyInit:(NSString *)myName{ name = myName; return self; } -(void)Add:(ComComponents *)c{ return; } -(void)Remove:(ComComponents *)c{ return; } -(void)Display:(int)depth{ return; } @end [/code] |
1 2 3 4 5 | [code]#import "ComComponents.h" @interface Leaf:ComComponents -(Leaf*)MyInit:(NSString*)myName; @end [/code] |
1 2 3 4 5 6 7 8 9 1011 | [code]#import "Leaf.h" @implementation Leaf -(Leaf*)MyInit:(NSString *)myName{ name = myName; return self; } -(void)Add:(ComComponents *)c{ NSLog(@"Cannot add to a leaf"); } -(void)Remove:(ComComponents *)c{ NSLog(@"Cannot remove from a leaf"); } -(void)Display:(int)depth{ NSLog(@"[%dLevel]%@", depth,name); } @end [/code] |
1 2 3 4 56 | [code]#import "ComComponents.h" @interface Composite :ComComponents{ NSMutableArray *children; } -(Composite*)MyInit:(NSString*)myName; @end [/code] |
1 2 3 4 5 6 7 8 9 1011 | [code]#import "Composite.h" @implementation Composite -(Composite*)MyInit:(NSString *)myName{ name = myName; children= [NSMutableArray new]; return self; } -(void)Add:(ComComponents *)c{ [children addObject:c]; } -(void)Remove:(ComComponents *)c{ [children addObject:c]; } -(void)Display:(int)depth{ NSLog(@"[%dLevel]%@", depth,name); for(ComComponents *component in children) [component Display:depth +1]; } @end [/code] |
1 2 3 4 5 6 7 8 9 1011 | [code]#import #import "Leaf.h" #import "Composite.h" int main (int argc,const char *argv[]) { @autoreleasepool{ Composite *root = [[Composite alloc]MyInit:@"root"]; [root Add:[[Leaf alloc]MyInit:@"Leaf A"]]; [root Add:[[Leaf alloc]MyInit:@"Leaf B"]]; Composite *comp = [[Composite alloc]MyInit:@"Composite X"]; [comp Add:[[Leaf alloc]MyInit:@"Leaf XA"]]; [comp Add:[[Leaf alloc]MyInit:@"Leaf XB"]]; [root Add:comp]; Composite *comp2 = [[Composite alloc]MyInit:@"Composite XY"]; [comp2 Add:[[Leaf alloc]MyInit:@"Leaf XYA"]]; [comp2 Add:[[Leaf alloc]MyInit:@"Leaf XYB"]]; [comp Add:comp2]; [root Add:[[Leaf alloc]MyInit:@"Leaf C"]]; Leaf *leaf = [[Leaf alloc]MyInit:@"Leaf D"]; [root Add:leaf]; [root Remove:leaf]; [root Display:1]; } return 0; } [/code] |
转自:ww.ohcoder.com
相关文章推荐
- iOS Objective C--组合模式
- iOS UIscrollView的设计模式
- Objective-c 代理模式(dele…
- ios xmpp开发应用后台模式接…
- iOS KVC和KVO开发模式
- ios 如何判断设备处于静音模式
- IOS Objective c 同步 异步链接 …
- objective c 单例模式
- Objective-C 设计模式-组合模式 (Composite)
- 【读书笔记】Objective-C编程之道:iOS设计设计模式解析(1)-原型模式
- IOS高级开发十大问题 Cocoa&Objective-c高级开发问题
- Java 单例模式详解
- 设计模式之装饰模式(iOS开发,代码用Objective-C展示)
- 单例模式(Singleton Pattern)
- iOS App订单 星星评价的控件
- opencv在ios上的简单实现[objective-c&c++]
- 设计模式五 监听器模式(android) & 代理模式(ios)
- ios 分享到新浪微博(底层实现)
- ios Button的图片在播放anima…
- TestFlight——完美的iOS App测…