自己写的一个以影视明星为例子的代码如下:
MoveStar接口:
class="java">package com.dsl.proxy_pattern;
/**
* 定义一个影视明星接口
* @author EX-DENGSHENGLONG217
*
*/
public interface MoveStar {
public void ad();//明生基本都拍广告撒..
public void film();//也能拍电影
}
?
接下来为两个实现类:
package com.dsl.proxy_pattern;
/**
* 范冰冰明显就是一个影视明星,因此她有下列行为
* @author EX-DENGSHENGLONG217
*
*/
public class Fanbingbing implements MoveStar {
@Override
public void ad() {
System.out.println("我能拍广告的!");
}
@Override
public void film() {
System.out.println("我演的电影 很好噢!");
}
}
?
代理人类:
package com.dsl.proxy_pattern;
/**
* 范冰冰太忙了 这是她的代理人 我们认为她也能下列行为
* @author EX-DENGSHENGLONG217
*
*/
public class ProxyFan implements MoveStar {
private MoveStar moveStar;
public ProxyFan(){
this.moveStar=new Fanbingbing();//默认为范爷的代理人撒!
}
public ProxyFan(MoveStar moveStar){
this.moveStar=moveStar;//同明她也可以是任何影星的代理人
}
@Override
public void ad() {
this.moveStar.ad();//自己是不能拍广告的了要明星拍的
}
@Override
public void film() {
this.moveStar.film();//同样
}
}
?
影视制作人类:
package com.dsl.proxy_pattern;
public class MoveProducer {
/**
* 影视制作人来请明星们拍广告了
* @param args
*/
public static void main(String[] args) {
//哎!明星们太忙了啊,只有先请她们的代理人了
ProxyFan pf=new ProxyFan();//这样就是范冰冰的代理人
pf.ad();
pf.film();
//end 嗯这里就是代理人帮明星们做的事了!
//什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
//被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
//代理的人能干活呀。
/*说完这个故事,那额总结一下,代理模式主要使用了Java 的多态,干活的是被代理类,代理类主要是
接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。*/
}
}
?