Spring代理模式理解-靜態代理

代理模式
爲什麼要學習代理模式,因爲AOP的底層就是動態代理

代理模式

  • 靜態代理
  • 動態代理

學習AOP之前瞭解一下代理模式

靜態代理
靜態搭理的角色分析

  • 抽象角色:一般使用接口和抽象類來定義(真實角色和代理角色要做的事情)
  • 真實角色:被代理的角色(事情的幕後操控者)
  • 代理角色:代理真實角色的角色(給幕後操作者跑腿的人)同時還會做一些自己的事情
  • 客戶:使用代理角色進行一些操作(與跑腿的打交道的人)

代碼實現
抽象角色

public interface Rent {

    /**
     * 抽象角色--真實角色和代理角色需要共同去完成的事情
     */
    public void rent();
}

真實角色

public class Host implements Rent {

    /**
     * 真實角色要去完成的事情
     */
    @Override
    public void rent() {
        System.out.println("房東要出租房屋");
    }
}

代理角色

public class Proxy implements Rent{
    /**
     * 中介(代理角色)背後的老闆(真實角色)
     */
    private Host host;

    /**
     * 中介(代理角色)要和老闆產(真實角色)生關係
     * @param host
     */
    public Proxy(Host host) {
        this.host = host;
    }

    /**
     * 代理角色要去完成的事情
     */
    @Override
    public void rent(){
        /**
         * 中介(代理角色)要去完成的老闆(真實角色)要完成的事情
         */
        host.rent();

        /**
         * 中介(代理角色)去完成老闆(真實角色)沒有要求的附帶操作
         */
        seeHouse();
        hetong();
    }


    /**
     * 中介(代理角色)除了完成老闆(真實角色)交代的事情以外
     * 自己還要去做的附加操作
     */
    public void seeHouse(){
        System.out.println("中介帶客戶看房子");
    }

    public void hetong(){
        System.out.println("中介代替老闆和客戶籤合同");
    }
}

客戶

public class Client {
    public static void main(String[] args) {
        /**
         * 創建真實角色
         */
        Host host=new Host();
        /**
         * 創建代理角色
         */
        Proxy proxy=new Proxy(host);

        /**
         * 客戶通過中介(代理角色)去做老闆(真實角色)要做的事情-出租房子(抽象角色)
         */
        proxy.rent();
    }
}

分析: 在這個過程中,你直接接觸的就是中介,就如同現實生活中的樣子,你看不到房東,但是你依舊租到了房東的房子通過代理,這就是所謂的代理模式。

靜態代理的好處

  • 可以使得真實角色更加的純粹,不再去關注一件事情核心部分之外的公共事情
  • 公共的事情可以交給代理去處理,實現了業務的分工
  • 公共業務發生擴展時變得更加集中和方便

靜態代理的缺點:

  • 真實角色越多,代理角色就越多,需要寫的類更多了,開發效率降低

如果我們既要享受靜態代理的好處,又要避免動態代理的缺點,就出現了動態代理!

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