首页 > 代码库 > iOS_代理设计模式demo

iOS_代理设计模式demo

main.m

//
//  main.m
//  代理设计模式
/*
    代理设计模式的3种使用场合
        1,A 想让B 帮他做些事情,    可以让B成为A的代理先
        2,A 想通知B,A发生了一些事情,可以让B成为A的代理先
        3,B 想监听A发生了一些事情,  可以让B成为A的代理先
    代理设置模式的标准4步
    1,定义一份protocol协议
    2,B想做代理,必须先遵守并实现上面那份协议
    3,A里面定义一个成员 id <protocol> delegate
    4,将B的实例对象,赋值给A的成员变量delegate
 */
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Baby.h"
#import "nana.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        Baby *bb = [[Baby alloc]init];
        bb.age = 1;
        bb.Nanny = [[nana alloc]init];
        // 婴儿饿了
        [bb hungry];
        
    }
    return 0;
}



协议

BabyNannyDelegate.h

//
//  BabyNannyDelegate.h
//  代理设置模式
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <Foundation/Foundation.h>
@class Baby;
@protocol BabyNannyDelegate <NSObject>

// 婴儿保姆协议中 规定三个方法
// 给婴儿喂奶
- (void)feedBaby:(Baby *)baby;
// 逗乐婴儿
- (void)amuseBaby:(Baby *)baby;
// 拍打婴儿,使其入睡
- (void)patBaby:(Baby *)baby;
@end



Baby.h

//
//  Baby.h
//  代理设置模式
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BabyNannyDelegate.h"
@interface Baby : NSObject
// 对象是strong id代表任何对象都可以作保姆,只要遵守保姆协议,并实现协议中的三个方法
@property (nonatomic,strong) id<BabyNannyDelegate> Nanny;


@property (nonatomic , assign) int age;
- (void)cry;    // 婴儿哭啦
- (void)sleep;  // 婴儿想睡啦
- (void)hungry; // 婴儿想吃奶了
@end



Baby.m

//
//  Baby.m
//  代理设置模式
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "Baby.h"

@implementation Baby
- (void)cry
{
    NSLog(@"%d岁的婴儿...哭啦",_age);
    // 调用代理里面的逗乐婴儿的方法
    [_Nanny amuseBaby:self];
}
- (void)sleep
{
    NSLog(@"%d岁的婴儿...想睡觉啦",_age);
    // 调用代理里面的拍打婴儿使其入睡的方法
    [_Nanny patBaby:self];
}
- (void)hungry
{
    NSLog(@"%d岁的婴儿...想吃奶啦",_age);
    // 调用代理里面的给婴儿喂奶的方法
    [_Nanny feedBaby:self];
}

@end




保姆nana.h

//
//  nana.h
//  代理设置模式
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BabyNannyDelegate.h"

// 娜娜 现在想照看婴儿,必须遵守婴儿保姆协议,并实现里面的方法
@interface nana : NSObject<BabyNannyDelegate>
@end



保姆nana.m

//
//  nana.m
//  代理设置模式
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "nana.h"
#import "Baby.h"
@implementation nana
- (void)feedBaby:(Baby *)baby
{
    NSLog(@"娜娜正在给%d岁的婴儿喂奶",baby.age);
}
- (void)amuseBaby:(Baby *)baby
{
    NSLog(@"娜娜正在哄%d岁的婴儿开心",baby.age);
}
- (void)patBaby:(Baby *)baby
{
    NSLog(@"娜娜正在轻轻拍打%d岁的婴儿入睡",baby.age);
}
@end