设计模式-OC-委托代理

  • Post author:
  • Post category:其他

什么是委托代理模式

定义一套接口(也就是协议),某对象若想接受另一个对象的委托,则需要遵循此接口(协议),以便成为其”委托对象”,而这“另一个对象”则给其委托对象回传一些消息,也可以在发生相关时间时通知委托对象

创建过程

定义委托方法
创建委托对象,委托对象实现委托协议
在另一个类声明委托对象,和出发委托对象方法的方法

例子

正常人无法买票 需要委托代理才能买票

People.h

只有拥有BuyTicket协议的人才能成为代理

#import <Foundation/Foundation.h>
#import "BuyTicket.h""
NS_ASSUME_NONNULL_BEGIN

@interface People : NSObject
@property (nonatomic,weak) id<BuyTicket> agent;//一般是weak 
-(void)letAgentBuy;
@end

People.m

#import "People.h"

@implementation People
-(void)letAgentBuy
{
    NSLog(@"委托Agent买");
    if(self.agent == nil)
    {
        NSLog(@"没有委托人!");
        return;
    }
    if([self.agent respondsToSelector:@selector(buy)])//需要判断当前这个agent是否能执行buy消息 如果不能 又调用了buy函数就会导致崩溃
    {
        [_agent buy];
    }
    else
    {
        NSLog(@"该代理不能购买!购买失败!");
    }
}
@end

BuyTicket.h 也就是协议

只有拥有这个协议的人才能买票

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@protocol BuyTicket <NSObject>
-(void)buy;
@end

Agent.h

#import <Foundation/Foundation.h>
#import "BuyTicket.h"
NS_ASSUME_NONNULL_BEGIN

@interface Agent : NSObject<BuyTicket>
@end

Agent.m

#import "Agent.h"

@implementation Agent
-(void)buy
{
    NSLog(@"购买成功!");
}
@end


版权声明:本文为qq_43535469原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。