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