1. 程式人生 > >代理模式和裝飾模式的差別

代理模式和裝飾模式的差別

       學了代理模式之後發現靜態代理模式和裝飾模式非常的相似,代理類和被代理的客戶實現同一個介面,裝飾者和被裝飾者也是實現的同一個介面實現方式也類似(針對介面程式設計是一個主要設計原則)。搜尋之,得到結論:代理模式主要是控制對某個特定物件訪問,而裝飾模式主要是為了給物件新增行為

所以兩類的設計模式的程式碼還是有一些差別。下面程式碼來著網上,做了一些修改,原網址http://www.cnblogs.com/jaredlam/archive/2011/11/08/2241089.html

靜態代理模式

通常自己構造物件,方法中控制物件的訪問。

//介面
interface Subject{
	public void doAction();
}
//實現類
 class RealSubject implements Subject{
	@Override
	public void doAction() {		
	  System.out.println("do something");	
	}
	 
 }
 //代理類
 class Proxy implements Subject{
    private Subject subject;
    public Proxy(){
        //關係在編譯時確定
         subject = new RealSubject();
    }
    public void doAction(){
        //控制訪問
          if()
        	  subject.doAction();
          else
        	  ...
    }
}
裝飾模式

  在建構函式中傳入被裝飾的物件。

interface Component{
  public void operate();
}
//具體構件
class ConcreteComponent implements Component{
   public void operate(){
         System.out.print("do somthing");
    }
}
//裝飾者
class Decorator implements Component{ 
private Component component; 
    public Decorator(Component component){ 
//通過構造器傳值 
this.component = component 
}
 public void operation(){ 
           do something        
           component.operation();
           do Something 
           
      }
}