設計模式-代理模式

煮詩君發表於2020-08-31

介紹

代理模式是結構性模式,它通過引入一個新的物件(如小圖片和遠端代理物件)來實現對真實物件的操作或者將新的物件作為真實物件的一個替身。
我們現實生活中也有許多代理模式的影子。例如朋友出國旅遊,我們可以託朋友幫忙買些東西。或者,我們點外賣,配送員替我們去取餐等等。
結構圖


5965949-622007f52c45267b
圖片來源於網路

一共有三個角色

  1. Subject(抽象主題角色)
  2. Proxy(代理主題角色)
  3. RealSubject(真實主題角色)

時序圖

5965949-c87a5b07dd02a7d6
圖片來源於網路

案例

這邊的配送員就是代理角色,顧客是真實角色,配送員完成顧客到店取貨的步驟。
抽象主題角色

public abstract class Subject {
    public abstract void getFood();
}

顧客

public class Customer extends Subject {
    @Override
    public void getFood() {
        System.out.println("客戶拿到餐啦!");
    }
}

配送員

public class DeliveryMan extends Subject {
    private Customer customer = new Customer();
    
    public void goShop(){
        System.out.println("去商家取餐!");
    }

    @Override
    public void getFood() {
        goShop();
        customer.getFood();
        finish();
        
    }
    
    public void finish() {
        System.out.println("結束送餐!");
    }

}

測試

public class Client {

    public static void main(String[] args) {
        Subject subject = new DeliveryMan();
        subject.getFood();
    }

}

測試結果

5965949-70c8d20be49ef776
這裡寫圖片描述

Github地址

總結

上面的案例只是簡單的代理模式,實際開發中要複雜許多。
而且代理有還許多種,例如遠端代理(Remote Proxy)、 虛擬代理(Virtual Proxy)等等。
還有一種較為高階的代理模式叫做動態代理,Spring AOP就是採用動態代理模式。有興趣的可以

相關文章