1. 程式人生 > >設計模式 _第六招式_代理模式

設計模式 _第六招式_代理模式

一、定義
代理模式也叫委託模式,為其它物件提供一種代理以控制對這個物件的訪問,它是一項基本設計技巧。許多其他的設計模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式,在應用中,代理模式提供非常好的訪問控制。在一些著名的開源軟體中也經常見到它的身影,如Struts2 的from元素對映就採用了代理模式。

二、程式碼演示
- 代理模式通用類圖

這裡寫圖片描述
Subject抽象主體角色
抽象主體可以是抽象類也可以是介面,是一個最普通的業務型別定義,無特殊要求

public interface Subject {
    //定義一個方法
    public void
request(); }
  • RealSubject具體的主體角色
    也叫被委託角色、被代理角色。是業務邏輯的具體執行者。
public class RealSubject implements Subject {
    //實現方法
    public void  request(){
        //業務邏輯處理
        System.out.println("RealSubject 業務邏輯處理");
    }
}
  • Proxy代理主體角色
    也叫做委託類、代理類。他負責對真實角色的應用,把所有抽象主題類定義的方法限制委託給真實主體角色實現,並且在真實主題角色處理完畢前後做預處理和善後工作。
public class Proxy implements Subject {
    //要代理的哪個實現類
    private Subject  subject = null ;
    //預設被代理者
    public Proxy(){
        this.subject = new Proxy();
    }
    //通過建構函式傳遞代理者
   public Proxy(Object ... objects){
   }
   public  Proxy(Subject _subject){
        this.subject = _subject;
   }
    @Override
public void request() { this.before(); this.subject.request(); this.after(); } //預處理 public void before(){ System.out.println("預處理"); } //善後處理 private void after(){ System.out.println("善後處理"); } }
  • 場景類
public class Client {
    public  static void main(String args[]){
        Proxy  proxy = new  Proxy(new RealSubject());
        proxy.request();
    }
}

三、優點
- 職責清晰
真正的角色就是實際的業務邏輯,不用關心其他非本職的事務,通過後期代理統一完成事務。
- 高擴充套件性
具體主題角色是隨時可以變化的,只要實現了介面,那代理類完全不用做任何修改。

四、缺點

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

六、注意事項