Dev@Free

zJun's Tech Weblog

[GoF23] java中的Proxy模式

代理(Proxy)模式,顾名思义就是对象之间不直接发生联系,而是通过中间的代理人进行沟通。这种关系在现在的娱乐圈中普遍存在:明星通常都有经纪人来代理自己的演出事宜,而不是直接去联系演出商。下面就通过这个实际中的例子来说明代理模式。
首先画出关系类图


演艺人士:包括经纪人和明星,都属于娱乐圈中人。
/**
 * 演艺人士
 * 
 * 
@author  zJun
 
*/

public   interface  Artist  {
    
/**
     * 演出活动
     
*/

    
public   void  show(String showType);
}

经纪人
/**
 * 经纪人(参考《Java与模式》- "代理(Proxy)模式"一章部分代码)
 * 
 * 
@author  zJun
 * 
 
*/

public   class  Broker  implements  Artist, InvocationHandler  {

    
private  String SIGN  =   " [经纪人] "
;

    
//  旗下明星

     private  Star star;

    
/**
     * 签订和约
     
*/

    
public   void  subcontract()  {
        System.out.println(SIGN 
+   " 签订和约 "
);
    }


    
/**
     * 经纪人代明星打理一切演出事宜
     
*/

    
public   void  show(String showType)  {
        
//  签约

        subcontract();

        
//  通知明星演出

         if  (star  ==   null {
            star 
=   new
 Star();
        }

        star.show(showType);

        
//  交税
        payTax();
    }


    
/**
     * 演出后交税
     
*/

    
public   void  payTax()  {
        System.out.println(SIGN 
+   " 演出后交税 "
);
    }

}


明星
/**
 * 明星
 * 
 * 
@author  zJun
 * 
 
*/

public   class  Star  implements  Artist  {

    
private  String SIGN  =   " [明星] "
;

    
public   void  show(String showType) 
{
        System.out.println(SIGN 
+
 showType);
    }


}

赞助商:通过联系经纪人安排明星演出
/**
 * 赞助商: 与经纪人联系安排演出事宜
 * 
 * 
@author  zJun
 
*/

public   class  Patron  {

    
/**
     * 
@param  args
     
*/

    
public   static   void  main(String[] args)  {
        Broker broker 
=   new
 Broker();
        broker.show(
" 演电影 "
);
        broker.show(
" 拍电视 "
);
        broker.show(
" 出唱片 "
);
        broker.show(
" 演唱会 "
);
    }


}

[运行结果]
[ 经纪人 ] 签订和约
[ 明星 ]
演电影
[ 经纪人 ]
演出后交税
[ 经纪人 ]
签订和约
[ 明星 ]
拍电视
[ 经纪人 ]
演出后交税
[ 经纪人 ]
签订和约
[ 明星 ]
出唱片
[ 经纪人 ]
演出后交税
[ 经纪人 ]
签订和约
[ 明星 ]
演唱会
[ 经纪人 ] 演出后交税

参考资料
《Java与模式》 阎宏 电子工业出版社

posted on 2006-03-21 23:34 zJun's帛罗阁 阅读(4196) 评论(4)  编辑  收藏 所属分类: 设计模式

评论

# re: [GoF23] java中的Proxy模式 2006-03-22 13:59 guitarpoet

有趣,通俗易懂,符合面向对象的概念啊,哈哈哈  回复  更多评论   

# re: [GoF23] java中的Proxy模式 2006-03-22 14:08 guitarpoet

不过你并没有真正的把Java的Proxy的概念用出来。
首先Broker不应该是Artist。
Broker只应该是InvocationHandler,Artist代理是Proxy的newProxyInstance方法自动构造出来的,Broker自己去找Artist(当然也可以采用IOC让Artist自己去找Broker),通过InvocationHandler的invoke方法截获Show方法,找适应的Artist去处理。
这个例子需要改进一下。  回复  更多评论   

# re: [GoF23] java中的Proxy模式 2006-03-22 16:56 zJun

@guitarpoet
是的。原本是要接着写Java API提供的实现Proxy模式的(就像你说的那样通过InvocationHandler和Proxy来实现),只是昨晚时间太晚了,只好先写到这里,先介绍Proxy的概念,留到今天再写了。  回复  更多评论   

# re: [GoF23] java中的Proxy模式 2008-01-23 15:22 Star

Broker类实现InvocationHandler接口为什么不见invoke()方法?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2006年3月>
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(15)

随笔分类

随笔档案

相册

收藏夹

博客

文档

站点

论坛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜