代理模式

23種創(chuàng)新模式總署
父文鏈接

代理模式與裝飾者模式非常相似,容易使人無(wú)法區(qū)別

裝飾器模式關(guān)注于在一個(gè)對(duì)象上動(dòng)態(tài)的添加方法,然而代理模式關(guān)注于控制對(duì)對(duì)象的訪問(wèn)。

用代理模式,代理類(lèi)(proxy class)可以對(duì)它的客戶(hù)隱藏一個(gè)對(duì)象的具體信息。因此,當(dāng)使用代理模式的時(shí)候,我們常常在一個(gè)代理類(lèi)中創(chuàng)建一個(gè)對(duì)象的實(shí)例。并且,當(dāng)我們使用裝飾器模式的時(shí)候,我們通常的做法是將原始對(duì)象作為一個(gè)參數(shù)傳給裝飾者的構(gòu)造器。

  • 使用代理模式,代理和真實(shí)對(duì)象之間的的關(guān)系通常在編譯時(shí)就已經(jīng)確定了.
  • 裝飾者能夠在運(yùn)行時(shí)遞歸地被構(gòu)造。

代碼:

public interface Sourceable {  
    public void method();  
}
public class Source implements Sourceable {  
  
    @Override  
    public void method() {  
        System.out.println("the original method!");  
    }  
}
public class Proxy implements Sourceable {  
  
    private Source source;  
    public Proxy(){  
        super();  
        /**
           *區(qū)別就在下面這句,是創(chuàng)建的,非作為參數(shù)傳進(jìn)來(lái)的
        */
        this.source = new Source();  
    }  
    @Override  
    public void method() {  
        before();  
        source.method();  
        atfer();  
    }  
    private void atfer() {  
        System.out.println("after proxy!");  
    }  
    private void before() {  
        System.out.println("before proxy!");  
    }  
}

使用:

public class ProxyTest {  
  
    public static void main(String[] args) {  
        Sourceable source = new Proxy();  //區(qū)別(代理,裝飾)
        source.method();  
    }  
  
}

代理模式的應(yīng)用場(chǎng)景:

如果已有的方法在使用的時(shí)候需要對(duì)原有的方法進(jìn)行改進(jìn),此時(shí)有兩種辦法:

  • 修改原有的方法來(lái)適應(yīng)。這樣違反了“對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉”的原則。
  • 就是采用一個(gè)代理類(lèi)調(diào)用原有的方法,且對(duì)產(chǎn)生的結(jié)果進(jìn)行控制。這種方法就是代理模式。
    使用代理模式,可以將功能劃分的更加清晰,有助于后期維護(hù)!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場(chǎng)景問(wèn)題# 1.1 訪問(wèn)多條數(shù)據(jù)## 考慮這樣一個(gè)實(shí)際應(yīng)用:要一次性訪問(wèn)多條數(shù)據(jù)。 這個(gè)功能的背景是這樣的;在...
    七寸知架構(gòu)閱讀 3,146評(píng)論 1 52
  • 在日常工作過(guò)程中會(huì)涉及到很多設(shè)計(jì)模式的使用,常用的有23種模式,但是其中比較常用的模式倒是沒(méi)多少,今天主要介紹下適...
    monkey01閱讀 666評(píng)論 0 0
  • 1. 定義 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。 2. 使用場(chǎng)景 當(dāng)想對(duì)某個(gè)對(duì)象做功能增強(qiáng)拓展,但又不想...
    程序員修仙閱讀 446評(píng)論 1 2
  • 1. 今天的心情:憤怒 疲憊 焦慮 充實(shí) 欣慰 迷茫 2. 今天的進(jìn)步: (1)上午回答了一個(gè)問(wèn)題被推頭條首頁(yè)。 ...
    Benz媽咪閱讀 278評(píng)論 0 0
  • 俗語(yǔ)云,人生一世,吃喝二字。可見(jiàn)吃在我們?nèi)松械闹匾?。并且吃文化在我?guó)也是源遠(yuǎn)流長(zhǎng)的。子曰:“食,色,性也?!边@...
    一淺疏影閱讀 576評(píng)論 12 32

友情鏈接更多精彩內(nèi)容