赞
踩
代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在代理模式中,我们创建一个具有现有对象(称为“真实对象”或“被代理对象”)相同功能的代理对象。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象间接地访问目标对象。这种方式可以增加额外的功能处理,例如权限校验、日志记录、事务处理等。
在代理模式中,通常包含以下几个角色:
以下是一个简单的 C# 代理模式实现示例,演示了虚拟代理的应用场景:
using System;
// 抽象主题角色
public interface IImage
{
void Display();
}
// 真实主题角色
public class RealImage : IImage
{
private string filename;
public RealImage(string filename)
{
this.filename = filename;
LoadFromDisk(filename);
}
private void LoadFromDisk(string filename)
{
Console.WriteLine($"Loading {filename}");
// 这里模拟加载图片的过程,实际开发中可能是复杂的文件读取和网络请求
System.Threading.Thread.Sleep(1000); // 模拟耗时操作
Console.WriteLine($"{filename} loaded");
}
public void Display()
{
Console.WriteLine($"Displaying {filename}");
}
}
// 代理角色
public class ProxyImage : IImage
{
private RealImage realImage;
private string filename;
private bool isLoaded = false;
public ProxyImage(string filename)
{
this.filename = filename;
}
public void Display()
{
if (!isLoaded)
{
realImage = new RealImage(filename);
isLoaded = true;
}
realImage.Display();
}
}
// 客户端代码
class Program
{
static void Main(string[] args)
{
IImage image = new ProxyImage("test.jpg");
// 假设在此时,我们不需要立即加载图片,只是占个位置
// 稍后,当真正需要显示图片时
image.Display(); // 此时才会真正加载图片
Console.ReadLine();
}
}
代理模式是一种非常有用的设计模式,它通过引入代理对象来控制对真实对象的访问,从而实现功能增强、权限控制、日志记录等目的。在C#中,代理模式可以应用于多种场景,如远程调用、虚拟代理、保护代理等,提高了软件系统的灵活性和可扩展性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。