Static Proxy(静态代理)

来源:互联网 发布:ar看车源码 编辑:程序博客网 时间:2024/06/04 18:55

代理模式有两种主题,一种是真实主题(真正做事的),一种是代理主题(真实主题的代理,可以帮助真实主题做一些辅助功能,使得真实主题只用关心核心实现)。下面我用一个歌手唱歌的例子来实现代理模式。事情是这样的,你想找一个歌手为你唱一首歌,但是歌手的所有活动都需要他的经纪人来安排。所以你必须联系他的经纪人,由经纪人做一些事情然后再将任务交给歌手。下面我们来实现下代码

注意 真实主题和代理主题需要实现相同的接口


1 新建真实主题和代理主题的公用接口‘’

public interface ISing {void sing();}

2 新建一个 歌手类 和一个歌手经纪人类


/** * 我是歌手 我只负责唱歌 */public class Singer implements ISing{@Overridepublic void sing() {System.out.println("咚次哒次,咚次哒次。苍茫的天涯是我的爱,绵绵的青山脚下花正开...");}}/** * 我是歌手的经纪人,我会帮他安排所有的活动,你要想联系歌手就来找我吧 */public class SingerAgent implements ISing{//这是我代理的歌手Singer singer = null;@Overridepublic void sing() {if(!preSing()){return;}if(singer == null){singer = new Singer();}singer.sing();}private boolean preSing() {Date date =new  Date();@SuppressWarnings("deprecation")int time = date.getHours();if(time<10 || time >17){System.out.println("很遗憾,我的歌手下班了,不能为你唱歌了。");return false;}return true;}}

3 新建测试类

public class ProxyTest {public static void main(String... a){//要想找歌手为你唱歌,我必须去找他的经纪人SingerAgent agent = new SingerAgent();//向经纪人发起一次唱歌的请求agent.sing();}}
输出结果

很遗憾,我的歌手下班了,不能为你唱歌了。

很遗憾,歌手暂时不能为你唱歌,你可以在每天的  10点到17点去找他的经纪人。