关于代理,有个例子。
小学生借给中学生10块钱。都一个月了中学生还不还钱,所以小学生实现了讨债的接口。
小学生重写了要钱方法
public void yaoqian(){
System.out.println("给我钱");},
中学生不给“就不给你咋地”,小学生打不过呀。
这时小学生找到了我,我是富有正义感的大学生。
我也实现了讨债的接口。
我有个小学生的成员变量(是帮他讨债吗。)
我也重写了要钱的方法。
public void yaoqian(){
System.out.println("打了中学生一顿,你他妈还不还钱");
System.out.println("哦,你同意还钱了");
小学生.yaoqian();
}
于是小学生愉快的拿到了钱。
这个例子中。
小学生的要钱操作是目的操作(真实操作),所以他继承了讨债接口,实现了要钱方法,但是实现有困难。
我要帮他要钱,所以也实现了讨债接口,代理角色就是先扫平障碍,然后调用目的操作(真实操作)。
关于代理模式主要有三个角色:
1 抽象角色(接口),包含抽象方法。(讨债接口,要钱方法。)
2 代理角色 implements XXX ,代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象与真实对象相同的接口以便在任何时刻都能代替真实对象。同时代理独享可以再执行对真实对象的操作时,附加其他操作,相当于对真实对象进行封装。
我是代理角色,要帮他要钱,所以也实现了讨债接口。还包含了一个小学生对象的成员对象。代理角色就是先扫平障碍,然后调用真实角色的目的操作(真实操作)。
3真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
还有一个关于代理设计模式的例子就是。java中的线程操作。Thread类与Runnable接口。
public class Thread
new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub for(;;){ System.out.println("runnable"); } } }).start();这里使用的是一个匿名内部类implements Runnable。它就是一个真实角色。
代理角色也就是Thread。
Thread的部分定义如下:
可以看到正是代理模式的使用。实现Runnable接口的好处多多了。
new Thread (XXXiimplements Runnable r) a
new Thread (XXXiimplements Runnable r) b
new Thread (XXXiimplements Runnable r) c
a,b,c共享r的实例。
不用受单继承限制。
原文地址:http://blog.csdn.net/wakewakewake/article/details/38835347