代理模式

前言

小龍同學花費畢生絕學精心學習並製作了自動化測試之selenium ,但預定分享時間時,小龍龍同學膽怯了,於是大哥小強出馬,幫他完成預定分享時間的工作

代理模式

爲其他對象(小龍)提供一個代理(小強)以控制對這個對象的訪問. 類圖如下:

類圖

優點:

  1. 職責清晰。
  2. 高擴展性。
  3. 智能化。

缺點:

  1. 由於在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。
  2. 實現代理模式需要額外的工作,有些代理模式的實現非常複雜。

使用場景:按職責來劃分,通常有以下使用場景:

  1. 遠程代理。
  2. 虛擬代理。
  3. Copy-on-Write 代理。
  4. 保護(Protect or Access)代理。
  5. Cache代理。
  6. 防火牆(Firewall)代理。
  7. 同步化(Synchronization)代理。
  8. 智能引用(Smart Reference)代理。

預定分享時間的職能

package com.jack.idea.test.designmode;

/**
 * 代理模式
 *
 * @author ljs.song
 * @date 2017-12-28 18:50
 */
public class Proxy {

    public static void main(String[] args) {
        ////接下來小強代理小龍去跟磊磊等搶分享時間
        Xiaoqiang xiaoqiang = new Xiaoqiang(new Xiaolong());
        //磊磊說4點他要分享
        xiaoqiang.reserveTime(4);

        System.out.println("----------------");
        //磊磊被上述大哥打敗,改成說他要5點分享
        xiaoqiang.reserveTime(5);
    }
}

//分享者
interface Sharer{

    /**
     * 預定時間 大家都來報出一些時間搶
     */
    void reserveTime(int time);
}

/**
 * 小龍內心知道自己想週四分享,但是怕有別人搶時間,不敢開口
 */
class Xiaolong implements Sharer{

    @Override
    public void reserveTime(int time) {
        System.out.println( "我想週四 " time " 點開始分享");
    }
}

/**
 * 老大哥小強出馬幫其抵擋一切入侵者
 */
class Xiaoqiang implements Sharer{

    private Sharer sharer;

    public Xiaoqiang(Sharer sharer) {
        this.sharer = sharer;
    }

    @Override
    public void reserveTime(int time) {
        //這裏表示這個代理能幫他全權做出一些反饋,不僅僅是調用被代理者的職能
        if(time == 4){
            System.out.println("我不管,只能小龍在這個點分享");
        }else{
            this.sharer.reserveTime(time);
        }
    }
}

轉載請註明出處 https://blog.csdn.net/abudexiatian

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