1. 程式人生 > >設計模式系列 - 代理模式

設計模式系列 - 代理模式

class 處理 con 分享 loading 情況下 目標 行為 之間

通過創建現有對象的對象,以便向外界通過訪問接口,這種模式我們稱之為代理模式

介紹

代理模式屬於結構型模式,通過在對象與對象之間添加一個代理中間層來到達對目標對象的間接訪問。

類圖描述

技術分享圖片

由上圖可知,我們通過定義一個基本接口來約束業務行為,然後定義具體的業務實現該接口,最後通過定義一個代理類來協調上層和具體業務實體之間的訪問,從而使上層也能訪問到下層對象。

代碼實現

1、創建接口

public interface IImage
{
    void Display();
}

2、實現接口

public class RealImage : IImage
{
    private string fileName;
    public RealImage(string fileName)
    {
        this.fileName = fileName;
        LoadFromDisk();
    }

    public void Display() => Console.WriteLine($"Displaying:{fileName}");
    private void LoadFromDisk() => Console.WriteLine($"Loading:{fileName}");
}

3、定義代理類

public class ProxyImage : IImage
{
    private RealImage realImage;
    private string fileName;
    public ProxyImage(string fileName)
    {
        this.fileName = fileName;
    }

    public void Display()
    {
        if (realImage == null)
        {
            realImage = new RealImage(fileName);
        }
        realImage.Display();
    }
}

4、上層調用

class Program
{
    static void Main(string[] args)
    {
        IImage image = new ProxyImage("test.png");
        image.Display();

        //繼續訪問時不會創建新對象
        image.Display();

        Console.ReadKey();
    }
}

總結

當上層訪問下次對象時,由於業務的需要,我們需要對下層對象進行一個處理,這個時候可以考慮使用代理模式來解決,這個模式帶來的好處是保證了現有底層對象不變的情況下進行了訪問控制。

設計模式系列 - 代理模式