代理模式和裝飾模式的差別
阿新 • • 發佈:2019-02-18
學了代理模式之後發現靜態代理模式和裝飾模式非常的相似,代理類和被代理的客戶實現同一個介面,裝飾者和被裝飾者也是實現的同一個介面,實現方式也類似(針對介面程式設計是一個主要設計原則)。搜尋之,得到結論:代理模式主要是控制對某個特定物件訪問,而裝飾模式主要是為了給物件新增行為。
所以兩類的設計模式的程式碼還是有一些差別。下面程式碼來著網上,做了一些修改,原網址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 } }