Gmail使用与代理模式
通过使用Gmail,进一步理解软件设计模式中的代理模式(Proxy pattern).
?
Gmail邮箱的使用需求:
一直使用的邮箱A,所有的邮件进出的直接使用邮箱;
大量的团队邮箱C1,C2,C3,...,Cn;
以前被废弃的邮箱D1,D2,D3,...,Dm。
为了使用的方便,我们希望所有的团队邮箱中的邮件能够自动转发到A,被废弃的邮箱能够自动转发邮件到A。一般情况下,我们可以简单的通过让C系、D系邮箱自动转发到A,不支持转发的可以通过Gmail自带的邮件提取功能去主动提取邮件。

我们似乎看到了解决的方法,但是对于有“洁癖”的朋友可能发现这样的问题:
邮件e同时发送到A,C1,D1,则出现了A中出现了三封一样的邮件e,这样不论是视觉上还是空间上面都是一种浪费。能否将其过滤掉呢?在这个时候大家可能容易想到那些强大的邮件过滤器机制。但是经过尝试,你会发现随着n、m值的增多,我们可能需要在A中设置大量的复杂的过滤机制,这样我们就增加了日常邮件系统的维护。这让我们很容易想到请别的人帮我们做过滤,在公司中你可能会有机会被配一个秘书来做此事,但是更多的人可能就得自我来“人肉法”了。那么我们能否请一个自动秘书呢?通过这个思路,我们在直接给A转发各种邮件时,先通过一个秘书,让秘书做统一的过滤后做再次转发至A.

以上就是通过一个统一的过滤秘书B,来达到简洁处理的效果。以后再有C系、D系邮箱的增加,我们就直接让他们转发到秘书B那里就好了。
如此以来,我们简化了A的过滤规则,提高了以后扩展邮箱时的速度。在这里我只是抛砖引玉,其实B中的过滤转发条件是丰富多样了,大家可以根据自己的具体需要来定制。
现在我们将解决方案引申,可以得到一种称为“代理”的广义社会生活的解决方案。
?
什么是代理?
?
当然,图上所示的是代理模式中的一个具体情况。而代理模式可以非常灵活的使用其他方式来实现,这样就与图上所示有很大的区别。
也许,现在你已经对代理模式已经有了一个宏观的认识了,下面我们来看看怎么实际的使用代理模
式
.........................
?网上有很多讨论这个设计模式的文章,我的开发经验有限在这里就不献丑了。
?
总结:
设计模式不仅仅可以使用在软件设计中,更可以发挥我们的想像将它们使用到一切适用的地方。本身这一个个模式都来源于生活嘛。充分利用网上的各个工具,力争使我们的工作生活娱乐“低耦合”、“高内聚”、“易扩展”。 1 楼 wdlfellow 2009-02-14 恩~学习了,楼主旁征博引,肚子很多墨水哦。 2 楼 wdlfellow 2009-02-14 cglib和jdk dynamic proxy采用就是这种代理方式吧? 3 楼 qianjigui 2009-02-14 <div class="quote_title">wdlfellow 写道</div><div class="quote_div">cglib和jdk dynamic proxy采用就是这种代理方式吧?</div>
<p>这两款工具,我确实没有怎么使用过。不过从其典型实例来看,</p>
<p>jdk dynamic proxy 一种典型的动态代理模式,感觉很像spring的底层实现哦。里面大量使用反射机制,确实是一个好的选择。在刚刚开始的时候,很多程序员都人为利用java的reflect的机制效率低速度慢,不过从后面的实践发现正是利用了这种机制使软件开发速度加快,“宁花机器一分,不花程序员一秒”嘛。</p>
<p>?</p>
<p>cglib确实非常典型哦。</p> 4 楼 Anddy 2009-03-10 王部 ~~~原来你在这里--javaeye !!向你学习