Proxy模式——靜態(tài)代理

java設計模式


Proxy : 代理人——代替別人工作的人
“本人”尋找“代理人”工作,但是代理人畢竟是代理人蔚晨,能代替本人所做的事有限,當代理人無法幫忙時再尋找本人

RealSubject:真實角色,是實現(xiàn)抽象接口的類献起。
Proxy:代理角色,內部含有對真實對象RealSubject的引用镣陕,從而可以操作真實對象谴餐。代理對象提供與真實對象相同的接口,以便在任何時刻都能代替真實對象呆抑。同時岂嗓,代理對象可以在執(zhí)行真實對象操作時,附加其他的操作鹊碍,相當于對真實對象進行封裝厌殉。
Subject : 接口,是對象和它的代理共用的接口侈咕,讓RealSubject和Proxy具有一致性公罕。

Proxy.png

1.抽象接口

public interface Subject {
    void setNumber(int number);//代理人可以幫忙做的事
    int getNumber();//代理人可以幫忙做的事
    void displayNumber();//只有本人才能做的事
}

2.真實類

public class RealSubject implements Subject {

    private int number;

    public RealSubject(){
        System.out.println("正在生成本人實例");
    }//非參構造函數(shù)

    public RealSubject(int number){
        this.number = number;
        System.out.println("正在生成本人實例");
    }//構造函數(shù)

    @Override
    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public int getNumber() {
        return number;
    }

    @Override
    public void displayNumber() {
        System.out.println("只有本人才能做的事 :");
        System.out.println(number);
    }//只有本人才能做的事
}

3.代理類

public class Proxy implements Subject {
    private RealSubject realSubject;//本人。代理人持有本人的引用耀销,當代理人無法完成要求時楼眷,再生成本人
    private int number;

    public Proxy(int number){
        this.number = number;
    }

    @Override
    public void setNumber(int number) {
        if(realSubject != null){
            //當本人不是null,則說明以及生成了本人的實例化對象熊尉,這時就可以直接讓本人操作了
            realSubject.setNumber(number);
        }
        this.number = number;
    }

    @Override
    public int getNumber() {
        return number;
    }

    @Override
    public void displayNumber() {
        //這件事只用又本人來做罐柳,所以要生成“本人”
        realize();
        realSubject.displayNumber();

    }
    private void realize(){
        if(realSubject == null){
            realSubject = new RealSubject();
        }
    }
}

4.測試

public class Main {

    public static void main(String[] args) {

        Subject subject = new Proxy(5);
        System.out.println("現(xiàn)在的數(shù)字是 :" + subject.getNumber());//獲得數(shù)字代理即可完成
        subject.setNumber(12);//設置數(shù)字,代理也可以完成
        System.out.println("設置后的數(shù)字是 :" + subject.getNumber());//獲得數(shù)字代理即可完成
        System.out.println("打印出數(shù)字(只能由本人完成)");
        subject.displayNumber();
    }
}

5.運行結果

main.png

優(yōu)點

使用Proxy角色帽揪,使得耗時處理(生成實例)推遲硝清。
在大型系統(tǒng)的初始化過程中,存在大量耗時處理转晰,如果初始化暫時不會使用的功能芦拿,會使啟動時間延長,所以使用代理模式查邢,先初始化需要使用的功能

代理與委托

當遇到代理人不會解決的問題時蔗崎,還是會“轉交”給本人——“委托”(現(xiàn)實世界中是本人委托給代理人,在設計模式中卻相反)

HTTP代理

Web瀏覽器訪問Web頁面扰藕,不會每次都訪問遠程Web服務器來獲取頁面內容缓苛,而是先獲取HTTP代理緩存的頁面。只有當需要新的頁面或者是頁面緩存過期才去訪問遠程Web服務器
Web服務器:Client角色,HTTP代理:Proxy角色未桥,Web服務器:RealSubject角色

完整代碼在倉庫:https://github.com/chenshuyuhhh/ProxyPattern.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末笔刹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冬耿,更是在濱河造成了極大的恐慌舌菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亦镶,死亡現(xiàn)場離奇詭異日月,居然都是意外死亡,警方通過查閱死者的電腦和手機缤骨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進店門爱咬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绊起,你說我怎么就攤上這事精拟。” “怎么了勒庄?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵串前,是天一觀的道長。 經常有香客問我实蔽,道長,這世上最難降的妖魔是什么谨读? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任局装,我火速辦了婚禮,結果婚禮上劳殖,老公的妹妹穿的比我還像新娘铐尚。我一直安慰自己,他們只是感情好哆姻,可當我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布宣增。 她就那樣靜靜地躺著,像睡著了一般矛缨。 火紅的嫁衣襯著肌膚如雪爹脾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天箕昭,我揣著相機與錄音灵妨,去河邊找鬼。 笑死落竹,一個胖子當著我的面吹牛泌霍,可吹牛的內容都是我干的。 我是一名探鬼主播述召,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼朱转,長吁一口氣:“原來是場噩夢啊……” “哼蟹地!你這毒婦竟也來了?” 一聲冷哼從身側響起藤为,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤怪与,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凉蜂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琼梆,經...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年窿吩,在試婚紗的時候發(fā)現(xiàn)自己被綠了茎杂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡纫雁,死狀恐怖煌往,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情轧邪,我是刑警寧澤刽脖,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站忌愚,受9級特大地震影響曲管,放射性物質發(fā)生泄漏。R本人自食惡果不足惜硕糊,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一院水、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧简十,春花似錦檬某、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胰默,卻和暖如春场斑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背初坠。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工和簸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碟刺。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓锁保,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爽柒,可洞房花燭夜當晚...
    茶點故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內容

  • 【學習難度:★★★☆☆吴菠,使用頻率:★★★★☆】直接出處:代理模式梳理和學習:https://github.com/...
    BruceOuyang閱讀 1,718評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)浩村,斷路器做葵,智...
    卡卡羅2017閱讀 134,626評論 18 139
  • 1.ios高性能編程 (1).內層 最小的內層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結構(3).初始化時...
    歐辰_OSR閱讀 29,334評論 8 265
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法心墅,內部類的語法酿矢,繼承相關的語法,異常的語法怎燥,線程的語...
    子非魚_t_閱讀 31,596評論 18 399
  • 出錯返回-1瘫筐,調用成功就不返回了,如果調用成功铐姚,其后面的語句都不會再執(zhí)行了策肝,因為新程序替換了當前進程的正文等
    WinddddRunner閱讀 711評論 0 0