設計模式:4.代理模式

代理模式

代理模式屬於結構型模式

定義:爲其他對象提供一種代理以控制對這個對象的訪問

代理模式就是在操作原對象的時候,多出來一個代理類,用來對原對象的訪問進行控制和替代原對象進行一些操作
模式類圖
在這裏插入圖片描述
角色

  1. 抽象接口:able,定義業務接口
  2. 被代理類:Source
  3. 代理類:Proxy,用來對原對象的訪問進行控制和替代原對象進行一些操作
  4. 客戶端:Client,負責調用代理類

優點

  1. 職責清晰,被代理類只關心實際的業務邏輯,不關心其他事情
  2. 高擴展性,被代理類可以隨意更改,不會影響到代理類對其的訪問控制

抽象接口
被代理類和代理類都實現此接口

/**
 * @author: linan
 * @date: 2020/5/25 10:20
 * @description: 手機接口
 */
public interface Phoneable {

    /**
     * 打電話
     */
    void call();
}

被代理類
實現Phoneable接口

/**
 * @author: linan
 * @date: 2020/5/25 10:19
 * @description: 被代理類
 */
public class Phone implements Phoneable {

    @Override
    public void call() {
        System.out.println("打電話");
    }
}

代理類
實現Phoneable接口,持有被代理類實例,提供validate()對被代理類的訪問進行控制

/**
 * @author: linan
 * @date: 2020/5/25 10:19
 * @description: 被代理類
 */
public class Proxy implements Phoneable {

    private Phone phone = new Phone();

    @Override
    public void call() {
        if(validate()){
            phone.call();
        }
        System.out.println("結束通話");
    }

    /**
     * 檢查手機號
     * @return
     */
    private Boolean validate(){
        System.out.println("手機號驗證通過");
        return Boolean.TRUE;
    }
}

驗證

public static void main(String[] args) {
    Proxy proxy = new Proxy();
    proxy.call();
}

輸出

手機號驗證通過
打電話
結束通話

代理模式與裝飾器模式的區別,代理模式主要是對原對象的訪問進行控制,而裝飾器模式主要是爲了對原對象增加新的功能

參考:設計模式之禪:https://www.kancloud.cn/sstd521/design/193540

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