Objective C--代理模式


 今天,想和大家分享一下代理模式。首先呢,我想先用一句话概括一下代理模式。

 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

 那么,代理模式一般都在什么情况下使用呢?大体可以分为以下四种:

  1. 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

  2. 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

  3. 安全代理,用来控制真实对象访问时的权限。

  4. 智能指针,是指当调用真实的对象时,代理处理另外一些事。

 其实看起来用途还是蛮多的,不过说实话,基本的结构并不复杂哦!我是说最最基本的结构看起来并不复杂哦,下面可以看一下类的结构图:


 下面简单介绍一下图中提到的几个类型,Client不用多说,顾名思义就是所提供服务的目标对象,Subject类型是RealSubject和Proxy的公共接口,同理也就是说,Proxy类型和RealSubject类型都继承自Subject类型,通过Proxy类型来引用RealSubject类型,以达到隐藏RealSubject类型的目的,从而实现对RealSubject类型的代理功能。

 下面还是按老套路,把用Objective C实现的简单代码给大家做一个展示。

=============================================

  • Subject类接口

1
2
3
4
5
#import <Foundation/Foundation.h>
                     
@interface Subject: NSObject
-( void )Request;
@end
  • Subject类实现

1
2
3
4
5
6
7
#import "Subject.h"
                   
@implementation Subject
-( void )Request{
   return ;
}
@end
  • RealSubject类接口

1
2
3
4
#import "Subject.h"
                 
@interface RealSubject :Subject
@end
  • RealSubject类实现

1
2
3
4
5
6
7
8
#import "RealSubject.h"
            
@implementation RealSubject
-( void )Request{
   NSLog (@ "我是Request,真实的请求" );
   return ;
}
@end
  • Proxy类接口

1
2
3
4
5
6
7
#import "Subject.h"
#import "RealSubject.h"
          
@interface Proxy:Subject{
@private RealSubject *realSubject;
}
@end
  • Proxy类实现

1
2
3
4
5
6
7
8
9
10
#import "Proxy.h"
        
@implementation Proxy
-( void )Request{
    if (realSubject== nil )
         realSubject= [[RealSubject alloc]init];
     [realSubject Request];
     return ;
}
@end
  • Client端(Main()方法调用)

1
2
3
4
5
6
7
8
9
10
11
#import <Foundation/Foundation.h>
#import "Proxy.h"
    
int main ( int argc, const char  *argv[])
{
    @autoreleasepool {      
        Proxy *proxy = [[Proxy alloc]init];
        [proxy Request];
    }
return 0;
}

  好啦,完工!简单吧!呵呵!一共也没几行代码哦,关键是思想、思路。这才是精髓啊,关键不在模式本身的套路,关键是实现上的方法思路,这才是重点啊。关于这一点还是需要细细揣摩的啊!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值