设计模式-代理模式

     最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。

      今天先介绍一下代理模式。

概念:

           代理模式(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();
		}
	}
}

  

你可能感兴趣的:(设计模式,代理模式)