﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-稻草软件(strawsoft)-文章分类-设计模式</title><link>http://www.blogjava.net/strawsoft/category/38160.html</link><description>Java开发</description><language>zh-cn</language><lastBuildDate>Sat, 07 Mar 2009 10:00:02 GMT</lastBuildDate><pubDate>Sat, 07 Mar 2009 10:00:02 GMT</pubDate><ttl>60</ttl><item><title>代理模式(Proxy)学习与应用</title><link>http://www.blogjava.net/strawsoft/articles/258374.html</link><dc:creator>strawsoft</dc:creator><author>strawsoft</author><pubDate>Sat, 07 Mar 2009 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/strawsoft/articles/258374.html</guid><wfw:comment>http://www.blogjava.net/strawsoft/comments/258374.html</wfw:comment><comments>http://www.blogjava.net/strawsoft/articles/258374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/strawsoft/comments/commentRss/258374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/strawsoft/services/trackbacks/258374.html</trackback:ping><description><![CDATA[<p>所谓代理，也可以通俗的说是包装，或者过滤。也就是在一个伪真实对象去代表真实对象去做一些事情。<br />
<br />
举个例子：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 现在有一对双胞胎兄弟。这对兄弟外貌及其相似，以至于众人看来，是区分不出的。有一天，有个公司要约见双胞胎哥哥，<br />
不料这个哥哥突然有事出远门了，但这次约见非常重要，于是，弟弟就代表哥哥去约见。因为弟弟和哥哥非常相似，公司<br />
不能分辨，以为就是哥哥本人，所以，很顺利的完成了约见。<br />
<br />
上面只是一个简单的例子，也许不过恰当（谅解。。。）<br />
<br />
下面我用代码来演示一下这个过程：<br />
<br />
1.首先建立一个接口。<br />
<br />
public interface IGege<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void proc();<br />
}<br />
<br />
这个接口表明了哥哥的外部特征，是公司辨别哥哥的方法。<br />
<br />
2.建立一个真实主题(哥哥)<br />
public class Gege implments IGege<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void proc()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//哥哥的过程。。。<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
3.建立个代理主题(弟弟)<br />
public class Didi implements IGege<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;private IGege = new Gege();<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void proc()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//弟弟代理哥哥的过程。。。<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
从上面的代码可以看出，Gege和Didi都实现了IGege接口，就说明，他们同时都能够当成IGege来对待，所以让公司不能辨别出是哥哥还是弟弟。<br />
在弟弟个对象里，还有个一真的主题，就是哥哥对象。（用于转告哥哥。。。）<br />
<br />
4.建立公司类<br />
public class Company<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public void talk(IGege gege)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gege.proc();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
5.测试类<br />
public class Test<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Company com = new Company();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IGege gege = new Didi();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.talk(gege);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</p>
<img src ="http://www.blogjava.net/strawsoft/aggbug/258374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/strawsoft/" target="_blank">strawsoft</a> 2009-03-07 16:36 <a href="http://www.blogjava.net/strawsoft/articles/258374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>