OC-036.协议的用法,代理模式delegate的设计思路


OC中请一点要面对抽象,不要面对具体。

delegate代理模式使用场景:(其实是一种设计程序的模式或者想法,通过协议完成一种多态的特性,让代码更加抽象)

1、当A类对象发生什么事想通知B类型对象 (B类对象成为A类对象的代理)
2、A类中有些事情,自己无法处理,需要B类对象帮助其处理 (B类对象成为A类对象的代理)
3、B类对象向知道A类对象中发生的事情 (B类对象成为A类对象的代理)

老板 与 司机

老板要去某地购物,需要通知司机 (司机就是老板的代理)
老板想开车,但是驾照没考出,需要司机帮忙 (司机就是老板的代理)
司机想知道老板什么时候要出去(司机就是老板的代理)

步骤
1、A类对象发生事情向要给外边发一个通知来让其他类的实例对象帮做事情
2、在A类中定义协议 Adelegate,协议中写希望其他的实例对象帮做事情
3、在A类中定义一个属性 id<Adelegate> delegate
4、当A类对象发生事情就去通知它的代理来做事情,这个时候需要判断它的代理是否真的有能力帮它来做
5、B类型对象想成为A类对象代理的类,就要要遵守ADelegate的协议
6、实现自己想要监听的方法

7、让B类对象成为A类对象的代理

#import <Foundation/Foundation.h>//------main
#import "LSStudent.h"
#import "LSManager.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        LSBoss *boss = [[LSBoss alloc] init]; //创建老板
        LSStudent *stu = [[LSStudent alloc] init];//创建学生
        boss.delegate = stu;//老板的代理是学生
        boss.money = 10000;
        [boss wantToGoToShoping];//这里就是学生去开车
        LSManager *manager = [[LSManager alloc] init];
        boss.delegate = manager; //这里把司机换成了经理
        [boss wantToGoToShoping];
 
    }
    return 0;
}
#import <Foundation/Foundation.h>//------LSBoss.h
@class LSBoss;   //让编译器知道有这个类
@protocol LSBossDelegate <NSObject>   //定义一个代理的协议

- (void) driveToShop:(LSBoss *) boss; //协议中需要去实现的方法,开车带老板去商店买东西

@end

@interface LSBoss : NSObject
@property(nonatomic,strong)id<LSBossDelegate> delegate; //老板的司机代理
@property(nonatomic,assign)double money; //老板的钱
-(void) wantToGoToShoping; //想去购物的方法
@end
#import "LSBoss.h"//------LSBoss.m

@implementation LSBoss
-(void) wantToGoToShoping{
    //判断一下,代理是否有能力开车
    if ([self.delegate respondsToSelector:@selector(driveToShop:)]) {
        [self.delegate driveToShop:self];
    }else{
        NSLog(@"让隔壁老王来");
    }
}
@end
#import <Foundation/Foundation.h>//------LSStudent.h 创建一个学生,遵守协议
#import "LSBoss.h"
@interface LSStudent : NSObject <LSBossDelegate>

@end
#import "LSStudent.h"//------LSStudent.m

@implementation LSStudent
- (void) driveToShop:(LSBoss *) boss{
    boss.money -= 100;
    NSLog(@"%s,money = %.2lf",__func__,boss.money);
}
@end
#import <Foundation/Foundation.h>//------LSManager.h 创建一个经理遵守协议
#import "LSBoss.h"
@interface LSManager : NSObject <LSBossDelegate>

@end
#import "LSManager.h"//------LSManager.m

@implementation LSManager
- (void) driveToShop:(LSBoss *) boss{
    boss.money -= 500;
    NSLog(@"%s,money = %.2lf",__func__,boss.money);
}

@end








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值