Java Proxy Pattern(代理模式)

在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。
在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。

關鍵代碼:實現與被代理類組合。

優點: 1、職責清晰。 2、高擴展性。 3、智能化。
缺點: 1、由于在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。 2、實現代理模式需要額外的工作,有些代理模式的實現非常復雜。

注意事項: 1、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。 2、和裝飾器模式的區別:裝飾器模式為了增強功能,而代理模式是為了加以控制。

  1. 創建一個接口。
/**
 * 1. 創建一個接口
 * @author mazaiting
 */
public interface Image {
    /**
     * 顯示
     */
    void display();
}
  1. 創建實現接口的實體類。
/**
 * 2. 創建實現接口的實體類。
 * @author mazaiting
 */
public class RealImage implements Image{

    private String fileName;

    public RealImage(String fileName) {
        this.fileName = fileName;
        loadFromDisk(fileName);
    }
    
    private void loadFromDisk(String filename) {
        System.out.println("Loading " + filename);
    }

    public void display() {
        System.out.println("Displaying " + fileName);
    }

}


/**
 * 2. 創建實現接口的實體類。
 * @author mazaiting
 */
public class ProxyImage implements Image{

    private RealImage realImage;
    private String fileName;
    
    public ProxyImage(String fileName){
        this.fileName = fileName;
    }
    
    public void display() {
        if (null == realImage){
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }

}
  1. 當被請求時,使用 ProxyImage 來獲取 RealImage 類的對象。
public class Client {
    public static void main(String[] args) {
        Image image = new ProxyImage("test.jpg");

        // 圖像將從磁盤加載
        image.display();
        System.out.println("");
        // 圖像將無法從磁盤加載
        image.display();

    }
}
  1. 打印結果
Loading test.jpg
Displaying test.jpg

Displaying test.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容