// main.m
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
/*
1. 组合模式的概念:
组合模式就是一个类中声明了其它类的对象
2. 优点:
全局对象方法中都可以直接访问,节省了代码量
3. 缺点:
依赖性比较强
4. 使用场景:
当多个方法都用到了同一个对象,那么就把它设置为成员变量
如何判断组合模式的合理性:
XXX 拥有了 XXX (谁拥有誰的一个关系)
*/
// 这里以一个女孩在玩一个ipad为例,那么就需要女孩类,ipad类
#import <Foundation/Foundation.h>
#import "Girl.h"
int main(int argc, const char * argv[]) {
// 以下通过新建 Girl的一个对象girl来调用girl的对象方法,而方法中将对象ipad作为参数传入
Girl *girl = [Girl new];
[girl setAge:18];
SanWei s = {15,16,17};
[girl setSanWei:s];
[girl setAddress:@"北京"];
//
Ipad *ipad = [Ipad new];
[girl setIpad:ipad];
// [girl playGameWithIpad:ipad andGameName:@"愤怒小鸡"];
// [girl listenMusicWithIpad:ipad andMusicName:@"这是一首歌"];
// [girl watchVideoWithIpad:ipad andVideoNameL:@"机器人总动员"];
// [girl writeEmailWithIpad:ipad andEmailAddredd:@"1214352@.qq.com" andEmailContent:@"这是我发给你的电子邮件"];
// 以上实现了女孩玩ipad的功能,但是girl对象方法,每次都会调用ipad方法,那么,我么可以将
// ipad对象作为girl中的一个实例变量,那么就可以在girl对象中调通过ipad对象调用ipad的对象方法
// 注意:需要重写Girl中的对象方法
[girl playGameWithName:@"找你妹"];
[girl listenMusicName:@"好久不见"];
[girl watchvideoName:@"大圣归来"];
[girl writeEmailWithAddress:@"0000001@qq.com" andEmailContent:@"这是邮件"];
return 0;
}
//
// Girl.h
// 匿名对象
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Ipad.h"
typedef struct
{
float _xiongWei;
float _yaoWei;
float _tongWei;
}SanWei;
@interface Girl : NSObject
{
int _age; // 年龄
SanWei _sanWei; // 三围
NSString *_address; // 住址
Ipad *_ipad; // 将ipad对象作Girl的成员变量
}
// 一下声明set和get方法
- (void)setAge:(int)age;
- (int)age;
- (void)setSanWei:(SanWei)sanWei;
- (SanWei)sanWei;
- (void)setAddress:(NSString *)address;
- (NSString *)address;
- (void)setIpad:(Ipad*)ipad; // 这里是把对象ipad作为成员变量后 给他set和get方法
- (Ipad *)ipad;
// 一下声明女孩玩ipad的各个方法,因此先添加ipad类
// 1.女孩通过ipad玩游戏
- (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name;
// 2.女孩听音乐
- (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name;
// 3.女孩看电影
- (void)watchVideoWithIpad:(Ipad *)ipad andVideoNameL:(NSString *)name;
// 4.女孩发邮件
- (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddredd:(NSString *)address andEmailContent:(NSString *)content;
#pragma mark - 增强后
- (void)playGameWithName:(NSString *)name;
- (void)listenMusicName:(NSString *)name;
- (void)watchvideoName:(NSString *)name;
- (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content;
@end
//
// Girl.m
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Girl.h"
@implementation Girl
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)setSanWei:(SanWei)sanWei
{
_sanWei = sanWei;
}
- (SanWei)sanWei
{
return _sanWei;
}
- (void)setAddress:(NSString *)address
{
_address = address;
}
- (NSString *)address
{
return _address;
}
- (void)setIpad:(Ipad*)ipad
{
_ipad = ipad;
}
- (Ipad *)ipad
{
return _ipad;
}
// 一下声明女孩玩ipad的各个方法,因此先添加ipad类
// 1.女孩通过ipad玩游戏
- (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name
{
[ipad playGameWithName:name];
}
- (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name
{
[ipad listenMusicWithName:name];
}
- (void)watchVideoWithIpad:(Ipad *)ipad andVideoNameL:(NSString *)name
{
[ipad watchVideoWithName:name];
}
- (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddredd:(NSString *)address andEmailContent:(NSString *)content
{
[ipad writeEmailWithAddress:address andEmialContent:content];
}
#pragma mark - 增强后
- (void)playGameWithName:(NSString *)name
{
[_ipad playGameWithName:name];
}
- (void)listenMusicName:(NSString *)name
{
[_ipad listenMusicWithName:name];
}
- (void)watchvideoName:(NSString *)name
{
[_ipad watchVideoWithName:name];
}
- (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content
{
[_ipad writeEmailWithAddress:address andEmialContent:content];
}
@end
//
// Ipad.h
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum
{
kIColorWrite,
kIColorBlack
}IColor;
@interface Ipad : NSObject
{
int _size;
IColor _color;
}
// 声明set和get方法
- (void)setSize:(int)size;
- (int)size;
- (void)setClolr:(IColor)clolr;
- (IColor)color;
// 声明ipad的功能方法
- (void)playGameWithName:(NSString *)name; // 玩游戏
- (void)listenMusicWithName:(NSString *)name; // 听音乐
- (void)watchVideoWithName:(NSString *)name; // 看电影
- (void)writeEmailWithAddress:(NSString *)address andEmialContent:(NSString *)content; // 写邮件(包括邮件地址和邮件内容)
@end
//
// Ipad.m
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Ipad.h"
@implementation Ipad
- (void)setSize:(int)size
{
_size = size;
}
- (int)size
{
return _size;
}
- (void)setClolr:(IColor)clolr
{
_color = clolr;
}
- (IColor)color
{
return _color;
}
// 声明ipad的功能方法
- (void)playGameWithName:(NSString *)name
{
NSLog(@"游戏名称为:%@", name);
}
- (void)listenMusicWithName:(NSString *)name
{
NSLog(@"音乐名为:%@",name);
}
- (void)watchVideoWithName:(NSString *)name
{
NSLog(@"电影名为:%@",name);
}
- (void)writeEmailWithAddress:(NSString *)address andEmialContent:(NSString *)content
{
NSLog(@"发送 %@ 到 %@", address, content);
}
@end
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
/*
1. 组合模式的概念:
组合模式就是一个类中声明了其它类的对象
2. 优点:
全局对象方法中都可以直接访问,节省了代码量
3. 缺点:
依赖性比较强
4. 使用场景:
当多个方法都用到了同一个对象,那么就把它设置为成员变量
如何判断组合模式的合理性:
XXX 拥有了 XXX (谁拥有誰的一个关系)
*/
// 这里以一个女孩在玩一个ipad为例,那么就需要女孩类,ipad类
#import <Foundation/Foundation.h>
#import "Girl.h"
int main(int argc, const char * argv[]) {
// 以下通过新建 Girl的一个对象girl来调用girl的对象方法,而方法中将对象ipad作为参数传入
Girl *girl = [Girl new];
[girl setAge:18];
SanWei s = {15,16,17};
[girl setSanWei:s];
[girl setAddress:@"北京"];
//
Ipad *ipad = [Ipad new];
[girl setIpad:ipad];
// [girl playGameWithIpad:ipad andGameName:@"愤怒小鸡"];
// [girl listenMusicWithIpad:ipad andMusicName:@"这是一首歌"];
// [girl watchVideoWithIpad:ipad andVideoNameL:@"机器人总动员"];
// [girl writeEmailWithIpad:ipad andEmailAddredd:@"1214352@.qq.com" andEmailContent:@"这是我发给你的电子邮件"];
// 以上实现了女孩玩ipad的功能,但是girl对象方法,每次都会调用ipad方法,那么,我么可以将
// ipad对象作为girl中的一个实例变量,那么就可以在girl对象中调通过ipad对象调用ipad的对象方法
// 注意:需要重写Girl中的对象方法
[girl playGameWithName:@"找你妹"];
[girl listenMusicName:@"好久不见"];
[girl watchvideoName:@"大圣归来"];
[girl writeEmailWithAddress:@"0000001@qq.com" andEmailContent:@"这是邮件"];
return 0;
}
//
// Girl.h
// 匿名对象
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Ipad.h"
typedef struct
{
float _xiongWei;
float _yaoWei;
float _tongWei;
}SanWei;
@interface Girl : NSObject
{
int _age; // 年龄
SanWei _sanWei; // 三围
NSString *_address; // 住址
Ipad *_ipad; // 将ipad对象作Girl的成员变量
}
// 一下声明set和get方法
- (void)setAge:(int)age;
- (int)age;
- (void)setSanWei:(SanWei)sanWei;
- (SanWei)sanWei;
- (void)setAddress:(NSString *)address;
- (NSString *)address;
- (void)setIpad:(Ipad*)ipad; // 这里是把对象ipad作为成员变量后 给他set和get方法
- (Ipad *)ipad;
// 一下声明女孩玩ipad的各个方法,因此先添加ipad类
// 1.女孩通过ipad玩游戏
- (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name;
// 2.女孩听音乐
- (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name;
// 3.女孩看电影
- (void)watchVideoWithIpad:(Ipad *)ipad andVideoNameL:(NSString *)name;
// 4.女孩发邮件
- (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddredd:(NSString *)address andEmailContent:(NSString *)content;
#pragma mark - 增强后
- (void)playGameWithName:(NSString *)name;
- (void)listenMusicName:(NSString *)name;
- (void)watchvideoName:(NSString *)name;
- (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content;
@end
//
// Girl.m
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Girl.h"
@implementation Girl
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)setSanWei:(SanWei)sanWei
{
_sanWei = sanWei;
}
- (SanWei)sanWei
{
return _sanWei;
}
- (void)setAddress:(NSString *)address
{
_address = address;
}
- (NSString *)address
{
return _address;
}
- (void)setIpad:(Ipad*)ipad
{
_ipad = ipad;
}
- (Ipad *)ipad
{
return _ipad;
}
// 一下声明女孩玩ipad的各个方法,因此先添加ipad类
// 1.女孩通过ipad玩游戏
- (void)playGameWithIpad:(Ipad *)ipad andGameName:(NSString *)name
{
[ipad playGameWithName:name];
}
- (void)listenMusicWithIpad:(Ipad *)ipad andMusicName:(NSString *)name
{
[ipad listenMusicWithName:name];
}
- (void)watchVideoWithIpad:(Ipad *)ipad andVideoNameL:(NSString *)name
{
[ipad watchVideoWithName:name];
}
- (void)writeEmailWithIpad:(Ipad *)ipad andEmailAddredd:(NSString *)address andEmailContent:(NSString *)content
{
[ipad writeEmailWithAddress:address andEmialContent:content];
}
#pragma mark - 增强后
- (void)playGameWithName:(NSString *)name
{
[_ipad playGameWithName:name];
}
- (void)listenMusicName:(NSString *)name
{
[_ipad listenMusicWithName:name];
}
- (void)watchvideoName:(NSString *)name
{
[_ipad watchVideoWithName:name];
}
- (void)writeEmailWithAddress:(NSString *)address andEmailContent:(NSString *)content
{
[_ipad writeEmailWithAddress:address andEmialContent:content];
}
@end
//
// Ipad.h
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum
{
kIColorWrite,
kIColorBlack
}IColor;
@interface Ipad : NSObject
{
int _size;
IColor _color;
}
// 声明set和get方法
- (void)setSize:(int)size;
- (int)size;
- (void)setClolr:(IColor)clolr;
- (IColor)color;
// 声明ipad的功能方法
- (void)playGameWithName:(NSString *)name; // 玩游戏
- (void)listenMusicWithName:(NSString *)name; // 听音乐
- (void)watchVideoWithName:(NSString *)name; // 看电影
- (void)writeEmailWithAddress:(NSString *)address andEmialContent:(NSString *)content; // 写邮件(包括邮件地址和邮件内容)
@end
//
// Ipad.m
// 组合模式
//
// Created by admin on 15/7/25.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Ipad.h"
@implementation Ipad
- (void)setSize:(int)size
{
_size = size;
}
- (int)size
{
return _size;
}
- (void)setClolr:(IColor)clolr
{
_color = clolr;
}
- (IColor)color
{
return _color;
}
// 声明ipad的功能方法
- (void)playGameWithName:(NSString *)name
{
NSLog(@"游戏名称为:%@", name);
}
- (void)listenMusicWithName:(NSString *)name
{
NSLog(@"音乐名为:%@",name);
}
- (void)watchVideoWithName:(NSString *)name
{
NSLog(@"电影名为:%@",name);
}
- (void)writeEmailWithAddress:(NSString *)address andEmialContent:(NSString *)content
{
NSLog(@"发送 %@ 到 %@", address, content);
}
@end