代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式可以用于延迟加载、控制访问、日志记录、缓存等。

代理模式的主要角色

  1. Subject(抽象主题):

    • 定义了代理类和真实类的公共接口。
  2. RealSubject(真实主题):

    • 实现了Subject接口,是真正需要被代理的对象。
  3. Proxy(代理类):

    • 持有对RealSubject的引用,并通过实现Subject接口来控制对RealSubject的访问。

代理模式的类型

  1. 远程代理:为一个对象在不同地址空间提供局部代表。
  2. 虚拟代理:根据需要创建开销很大的对象。
  3. 保护代理:控制对原始对象的访问。
  4. 智能引用代理:在访问对象时执行一些附加操作。

示例代码

以下是一个简单的虚拟代理示例,展示如何延迟加载资源密集型对象:

// 抽象主题
public interface IImage
{
    void Display();
}

// 真实主题
public class RealImage : IImage
{
    private string _fileName;

    public RealImage(string fileName)
    {
        _fileName = fileName;
        LoadFromDisk();
    }

    private void LoadFromDisk()
    {
        Console.WriteLine($"Loading {_fileName}");
    }

    public void Display()
    {
        Console.WriteLine($"Displaying {_fileName}");
    }
}

// 代理类
public class ProxyImage : IImage
{
    private RealImage _realImage;
    private string _fileName;

    public ProxyImage(string fileName)
    {
        _fileName = fileName;
    }

    public void Display()
    {
        if (_realImage == null)
        {
            _realImage = new RealImage(_fileName);
        }
        _realImage.Display();
    }
}

// 客户端代码
class Program
{
    static void Main()
    {
        IImage image = new ProxyImage("test.jpg");

        // 图像将从磁盘加载
        image.Display();

        // 图像不需要从磁盘加载
        image.Display();
    }
}

 

代理模式的优点

  • 控制对象访问:可以在不修改客户端代码的情况下控制对真实对象的访问。
  • 性能优化:通过延迟加载来提高性能。
  • 附加功能:可以在访问对象时添加额外的功能,如日志记录和权限控制。

代理模式的缺点

  • 增加复杂性:引入额外的类和接口,可能增加系统的复杂性。
  • 延迟响应:由于增加了一层间接访问,可能会导致响应时间增加。
posted @ 2024-10-25 10:23  刘继先  阅读(5)  评论(0编辑  收藏  举报