代理模式

代理模式

代理模式的定義

代理模式(Proxy Pattern)是一個使用率非常高的模式,其定義如下:
Provide a surrogate or placeholder for another object to control access to it.(爲其他對象提供一種代理以控制對象的訪問)。
代理模式也叫做委託模式,它是一項基本設計技巧。許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,而且在日常的應用中,代理模式可以提供非常好的訪問控制。
代理模式的通用類圖如下:

三個角色的定義:

  • Subject抽象主題角色
    抽象主題類可以是抽象類也可以是接口,是一個最普通的業務類型定義,無特殊要求。
  • RealSubject具體主題角色
    也叫做被委託角色、被代理角色。它纔是冤大頭,是業務邏輯的具體執行者。
  • Proxy代理主題角色
    也叫做委託類、代理類。它負責對真實角色的應用,把所有抽象主題類定義的方法限制委託給真實主題角色實現,並且在真實主題角色處理完畢前後做預處理和善後處理工作。
    抽象主題類:
public interface Subject {
    // 定義一個方法
    public void request();
}

真實主題類:

public class RealSubject implements Subject{

    // 實現方法
    @Override
    public void request() {
        // 業務邏輯處理
    }
}

代理類:

public class Proxy implements Subject{
    // 要代理那個實現類
    private Subject subject = null;
    // 默認被代理者
    public Proxy(){
        this.subject = new Proxy();
    }
    // 通過構造函數傳遞代理者
    public Proxy(Object...objects ){
    }

    // 實現接口中定義的方法
    @Override
    public void request() {
        this.before();
        this.subject.request();
        this.after();
    }

    // 預處理
    private void before(){
        // do something
    }

    // 善後處理
    private void after(){
        // do something
    }
}

一個代理類可以代理多個被委託者或被代理者,因此一個代理類具體代理那個真實主題角色,是由場景類決定的。
代理的構造函數:

public Proxy(Subject _subject){
        this.subject = _subject;
    }

代理模式的應用

代理模式的優點

  • 職責清晰

  • 高擴展性

  • 智能化

代理模式的使用場景

代理模式的使用場景非常多,大家可以看看Spring AOP,這是一個非常典型的動態代理。

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