小白学开发(iOS)OC_组合模式(2015-07-24)

 //  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值