什麼是”代理設計模式“,如何使用

代理設計模式

特點:兩個子類共同實現同一個接口,其中一個子類負責真實業務實現,另一個子類完成輔助真實業務主題的操作

用我們生活中經常碰見的例子來說明,在玩遊戲時會有“代練”幫助玩家上分,在買東西時會有“代購”幫助買家購買相應的東西。這裏的“代練”,“代購”實際上就是抽象的“代理設計模式”,思想來源於生活,因此“代理設計模式”的實現思想和“代購”“代練”一樣,我作爲女生對代購還是比較熟悉的,下面就用”買口紅“這個例子來解釋代理設計模式到底是怎樣實現的。

在”代理設計模式“中需要有三個必要要素:接口,真實主題類和代理類,結合”買口紅“的例子,接口就是”買口紅“,由於會買各種各樣品牌的口紅,因此要用接口實現,真實主題類就是買家自己,代理類就是代購,這三個要素缺一不可。
對應關係爲:
接口-買口紅
真實主題類-自己
代理類-代購

//接口(買口紅)
interface ISubject{
    void buyLipstick();
}

//真實主題類
class RealSubject implements ISubject{
    @Override
    public void buyLipstick() {
        System.out.println("買mac口紅");
    }
}

//代理類
class ProxySubject implements ISubject{
    //代理需要知道真實客戶的存在
    private ISubject realSubject;
    //代理與真實客戶建立聯繫
    //傳接口對象:不同客戶需要不同口紅,只需要繼承接口即可
    public ProxySubject(ISubject realSubject){
        this.realSubject = realSubject;
    }
    public void beforeBuy(){
        System.out.println("取錢,排隊");
    }
    public void afterBuy(){
        System.out.println("發貨,驗收");
    }
    @Override
    public void buyLipstick() {
        //輔助操作
        beforeBuy();
        //真實操作(付錢由真實顧客完成,代購只是輔助操作)
        this.realSubject.buyLipstick();
        //輔助操作
        afterBuy();
    }
}
public class Test {
    public static void main(String[] args) {
        ISubject iSubject = new ProxySubject(new RealSubject());
        iSubject.buyLipstick();
    }
}

如上便實現了代理設計模式

在Java中”代理設計模式還是比較常見的,例如在多線程中Thread就使用了代理設計模式
觀察多線程部分中Thread和Runnable源碼可以看出來:

  • 詳細內容可以參考:
代理設計模式 :
class Thread implements Runnable {...}//Thread是輔助完成資源調度,線程啓動,真正做的事情在自己實現的MyThread裏面
class MyThread implements Runnable{...}//真實業務

在這裏插入圖片描述

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