标签:
代理模式的核心思想就是一个类想做一个事(函数),但它不去亲自做(实现),委托别的类(代理类)来完成。代理模式Java和oc中都有很广泛的应用,好处颇多,以下是简单的介绍和小例子。
代理模式的优点:
1.可以实现传值,尤其是当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时。(这点在ios里面应用颇多)
2.实现了代码的解耦。可以对外提供接口,具体的工作由不同的客户来决定怎么做。
下面分别对ios和java中的代理模式简单说明
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
理解代理模式的关键:
1.从委托类角度上考虑:
委托类为什么要让别的类来代替自己做这件事?因为委托类有个东西需要别人做,但是不知道具体给谁做(有很多客户),所以干脆把这个接口扔出去,谁用的时候自己实现该方法就行了。
2.从代理类角度考虑:
虽然委托类“委托别人做事”,真正将客户提出的功能进行了落实的是委托类。客户既然成为客户,他是有需求的,需求是什么?就是协议方法的实现。客户的需求通过代理模式传入到委托类这里,从而实现客户的要求。
形象的说:委托类要做一件很厉害的事情,但是其中有一小部分需要根据不同的客户来填写响应的需求,这个需求就是对代理类(客户)暴露的接口,客户实现了这个接口以后委托类就可以把这个很厉害的事情做完了,最终得到客户想要的结果。
标签:
原文地址:http://www.cnblogs.com/jymblog/p/5650895.html