Object-C篇-设计模式之代理

作者: TianTianBaby223 | 来源:发表于2018-10-05 10:11 被阅读30次

一 : 代理设计模式简述

自己做不了的事情,教给别人帮你完成,并且,完成的那个结果返还给你.这个就是代理,举一个简单的小例子 : 假如足球明星C罗去参加一些商务活动,但是C罗所具有的能力只有足球踢得好,,有魅力这写,不会管安排酒店,安排飞机,安排安保,安排活动进程这些东西.这时候需要一个代理人,帮助C罗去完成这些琐事的东西,接下来看看,如何用代码实现这一场景.

二 : 代理设计模式应用场景

  • 当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)
  • 对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)
  • 当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)

三 : 设计并书写C罗的代理

定义C罗最近想做的事情

@interface CRonaldo : NSObject

//relax
-(void)releax;

//电视演出
-(void)TVShow;

@end
@implementation CRonaldo
-(void)TVShow{
    NSLog(@"C罗进行节目录制");
}

-(void)releax{
    NSLog(@"C罗在夏威夷海滩和妻子吹风");
}
@end

需要一个人来帮助自己去安排一下出演,和假期但是C罗身份在那摆着呢,这种事情不能自己做,这里要安排一个助手也就是代理在这里.

@interface Assistant : NSObject

@end

定义一个协议,那种人才有资格当这个助手呢,简单一,具有安排演出和安排假期能力的人能当上这个助手,定义一个协议,协议内容为安排假期和安排演出

@protocol AssistantProtocol <NSObject>
//安排演出
-(void)playTvShow;

//安排假期
-(void)playHoliday;
@end

让我们助手遵守这些协议

#import "AssistantProtocol.h"

@interface Assistant : NSObject<AssistantProtocol>

@end

@implementation Assistant
-(void)playTvShow{
    NSLog(@"预定飞机票");
    NSLog(@"排除车子");
    
    
    
}

- (void)playHoliday{
    NSLog(@"安排假期时间");
    NSLog(@"准备旅行用品,和居住酒店")
    
    
}

助手的条件,现在已经搞定了,我们现在去给C罗安排这么一个人来做这些事情

@interface CRonaldo : NSObject

//relax
-(void)releax;


//电视演出
-(void)TVShow;

@property(nonatomic,weak)id<AssistantProtocol> assisDegate;

@end
#import "CRonaldo.h"

@implementation CRonaldo
-(void)TVShow{
    if ([self.assisDegate respondsToSelector:@selector(playTvShow)] ) {
        [self.assisDegate playTvShow];
    }
    NSLog(@"C罗进行节目录制");
}

-(void)releax{
    if ([self.assisDegate respondsToSelector:@selector(playHoliday)] ) {
        [self.assisDegate playHoliday];
    }
    NSLog(@"C罗在夏威夷海滩和妻子吹风");
}

到现在为止呢,安排等琐碎的小事就算安排出去了,毕竟大明星都有自己的助理,接下来测试一下

 //创建助手一位
    Assistant *assis = [[Assistant alloc]init];
    
    //请出我们的球星C罗
    CRonaldo *ron = [[CRonaldo alloc]init];
    
    //给C罗安排助手
    ron.assisDegate = assis;
    
    //协助C罗完成 度假 和 演出
    [ron TVShow];
    [ron releax];

打印结果


打印结果

四 : 实际开发中的代理

  • 一般情况下, 当前协议属于谁, 我们就将协议定义到谁的头文件中

  • 协议的名称一般以它属于的那个类的类名开头, 后面跟上protocol或者delegate

  • 协议中的方法名称一般以协议的名称protocol之前的作为开头

  • 一般情况下协议中的方法会将触发该协议的对象传递出去

  • 一般情况下一个类中的代理属于的名称叫做 delegate

我们根据这些小小的建议在来修改一下C罗助手的书写方式

#import <Foundation/Foundation.h>
@protocol AssistantProtocol <NSObject>;
//安排演出
-(void)playTvShow;

//安排假期
-(void)playHoliday;

@end


@interface CRonaldo : NSObject

//relax
-(void)releax;


//电视演出
-(void)TVShow;

@property(nonatomic,weak)id<AssistantProtocol> assisDegate;

@end

相关文章

  • Object-C篇-设计模式之代理

    一 : 代理设计模式简述 自己做不了的事情,教给别人帮你完成,并且,完成的那个结果返还给你.这个就是代理,举一个简...

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 设计模式之代理模式

    设计模式之代理模式 今天学到Spring的动态代理实现AOP,对代理这个概念很模糊,看了一篇文章发现这使用了设计模...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • JDK动态代理源码学习

    继上一篇博客设计模式之代理模式学习之后http://blog.csdn.net/u014427391/articl...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • iOS开发之设计模式 - 代理模式

    由《大话设计模式 - 代理模式》的OC和部分Swift的语言转义 代理模式 继上一篇《装饰模式》 代理模式 小明追...

  • iOS开发之设计模式 - 代理模式

    由《大话设计模式 - 代理模式》的OC和部分Swift的语言转义 代理模式 继上一篇《装饰模式》[https://...

网友评论

    本文标题:Object-C篇-设计模式之代理

    本文链接:https://www.haomeiwen.com/subject/mswgnftx.html