最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。
今天先介绍一下代理模式。
概念:
代理模式(Proxy):为其他对象提供一种代理以控制对该对象的访问。
优点:
1、代理模式可以控制对象的访问权限;
2、智能指针:通过代理模式控制对对象的访问,当没有指针或引用指向该对象时释放占有的内存;
缺点:
代理模式会带来一些额外的开销,如不直接访问真实对象而是间接通过代理对象来访问。
比较:
(1)、适配器模式Adapter
适配器Adapter 为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。
(2)、装饰器模式Decorator
尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。
示例代码:
package Pattern;
/*
* 公共接口
*/
interface Subject
{
public void Print();
}
/*
* 真实对象
*/
class RealSubject implements Subject
{
public void Print()
{
System.out.println("完成打印功能!");
}
public void DoSomething()
{
System.out.println("完成其他功能!");
}
}
/*
* 代理对象
*/
class Proxy implements Subject
{
RealSubject realSubject;
public void Print()
{
if(null==realSubject)
realSubject=new RealSubject();
realSubject.Print();
}
}
public class Pattern {
public static void main(String[] args) {
try {
Proxy myProxy=new Proxy();
myProxy.Print();
} catch (Exception e) {
e.printStackTrace();
}
}
}