//
// Man.h
// 协议
//
// Created by 郭宝 on 16/7/16.
// Copyright © 2016年 郭宝. All rights reserved.
//
#import <Foundation/Foundation.h>
// setp1.规定协议内容
@protocol MakeLove <NSObject>
// 必需实现的方法
@required
// 买套
- (NSString *)buyCondoms:(NSString *)money;
// 可选择实现的方法
- (void) giveMoney;
@end
@interface Man : NSObject
// 委托方的写法
// step2设定委托方(有需求的人)
@property (nonatomic, weak) id delegate;
// 查看微信时
- (void)seeWeChat;
@end
//
// Man.m
// 协议
//
// Created by 郭宝 on 16/7/16.
// Copyright © 2016年 郭宝. All rights reserved.
//
#import "Man.h"
@implementation Man
- (void)seeWeChat {
// step3.让代理人, 去执行协议方法
// 代理人可能没有实现协议方法
// 判断: 判断代理人存不存在 & 判断代理人能否响应对应的协议方法, 满足上述两则条件, 则执行
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(buyCondoms:)]) {
NSString *Condoms = [self.delegate buyCondoms:@"40元"];
NSLog(@"%@", Condoms);
}
}
@end
//
// Woman.h
// 协议
//
// Created by 郭宝 on 16/7/16.//
Copyright © 2016年 郭宝. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Man.h"
// step4.签订协议, 得到协议内容
@interface Woman : NSObject <MakeLove>
@end
//
// Woman.m
// 协议
//
// Created by 郭宝 on 16/7/16.
// Copyright © 2016年 郭宝. All rights reserved.
//
#import "Woman.h"
@implementation Woman
// step5.实现协议方法
- (NSString *)buyCondoms:(NSString *)money {
NSLog(@"%@", money);
// 花钱得到Condoms
return @"成功买到了durex";
}
@end
//
// main.m
// 协议
//
// Created by 郭宝 on 16/7/16.
// Copyright © 2016年 郭宝. All rights reserved.
//#import <Foundation/Foundation.h>
#import "Man.h"
#import "Woman.h"
int main(int argc, const char * argv[]) {
// 代理delegate设计模式
// 举例:一个man通过微信让一个woman买一盒duress来MakeLove
// 通过打印结果可以看出成功将Woman的@"成功买到杜蕾斯"传值给了Man.
Man *boyStudent = [[Man alloc] init];
Woman *girlStudent = [[Woman alloc] init];
// step6.设定代理人
boyStudent.delegate = girlStudent;
[boyStudent seeWeChat];
return 0;
}
网友评论