代理模式與裝飾模式的區別

裝飾器模式關注於在一個對象上動態的添加方法,然而代理模式關注於控制對對象的訪問。換句話 說,用代理模式,代理類(proxy class)可以對它的客戶隱藏一個對象的具體信息。因此,當使用代理模式的時候,我們常常在一個代理類中創建一個對象的實例。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始對象作爲一個參數傳給裝飾者的構造器。

代理模式

//代理模式
public class Proxy implements Subject{

       private Subject subject;
       public Proxy(){
             //關係在編譯時確定
            subject = new RealSubject();
       }
       public void doAction(){
             ….
             subject.doAction();
             ….
       }
}




//代理的客戶
public class Client{
        public static void main(String[] args){
             //客戶不知道代理委託了另一個對象
             Subject subject = new Proxy();
             …
        }
}

裝飾模式

//裝飾器模式
public class Decorator implements Component{
        private Component component;
        public Decorator(Component component){
            this.component = component
        }
       public void operation(){
            ….
            component.operation();
            ….
       }
}


//裝飾器的客戶
public class Client{
        public static void main(String[] args){
            //客戶指定了裝飾者需要裝飾的是哪一個類
            Component component = new Decorator(new ConcreteComponent());
            …
        }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章