Object-c和Java中的代理

代理模式的核心思想就是一个类想做一个事(函数),但它不去亲自做(实现),委托别的类(代理类)来完成。代理模式Java和oc中都有很广泛的应用,好处颇多,以下是简单的介绍和小例子。

1.可以实现传值,尤其是当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时。(这点在ios里面应用颇多)

2.实现了代码的解耦。可以对外提供接口,具体的工作由不同的客户来决定怎么做。

IOS的代理模式:

分两步:

1.在委托类A声明一个代理和一个协议,协议里有个方法的声明(由代理来实现)。这样这个类就可以在自己内部调用mDelegate.dosomething(param p)来实现要做的东西。

2.设置代理,在代理类里,首先声明自己是A类的代理,即在interface后面加上<代理协议>。然后设置A的代理为自己:mA.mDelegate=self。然后去实现协议方法dosomething(param p)。

代理模式的好处:

Java的代理模式

思路跟IOS的相似,据说代理模式有很多种,这里写了个我理解的代理模式的例子:有三个关键角色:委托类:Request,代理类:Proxy,接口MyInterface

接口:里面有一个方法,处理数据Process

1 public Interface MyInterface{
2     int Process(int a);
3     
4 }

委托类:

 1  public class Request{
 2  
 3      int data=1;
 4      Proxy mProxy;
 5  
 6      public Request(Proxy p){
 7      this.mProxy=p; //通过构造函数传入代理p
 8 
 9     }
10  
11      public int ProcessData{
12 return mProxy.Process(data);       //在这里调用代理来做Process这个事情
13     }
14 
15     public static void Main(string args[]){
16         //实例化代理类和委托类
17         Proxy mProxy=new Proxy;
18         Request mRequest=new Request(mProxy);
19         //输出协议方法的结果
20         int result=mRequest.ProcessData;
21         System.out.println(result);
22     }
23  
24   }

代理类:

1 public Class Proxy implements MyInterface{
2    ....
3     public int Process(int a){       
4         return 10*a; //实现协议方法
5     }    
6 }

这样Proxy就替Request完成了ProcessData的任务,这里面代理类相当于客户,不同的客户可以有不同的处理a的方法。这里的代理是对a乘以了10.

这里Process就是服务端给客户端提供的接口,即把数据a暴露出来,由客户来决定怎么对a进行处理。

最后打印的结果为10

相关文章

c,c++,python,java都有什么区别

八年程序员,说说C、C++、Java、Python区别画经常有伙伴纠结不知道选什么编程语言,作为八年码农,给大家说说目前最流行的几种语言都有啥区别吧~从语言自身看C语言作为经典的面向过程的静态语言,可...