
代理设计模式属于GoF设计模式的结构设计模式类别,那么在本文中3D天堂将解释什么是代理模式以及如何在C#中实现代理设计模式。
如果想访问在同一应用程序代码或同一机器或同一网络中不可用的对象,代理模式很有用,它们可以存在于不同应用程序中,而这些应用程序存在于不同位置的其他机器中。
代理模式
代理模式提供了一个代表实际类功能的本地代理类,这个代理类将暴露给客户端而不是实际的类,客户端永远不会知道实际的类实例,客户端如何访问实际类的功能也由代理类控制。
GoF定义:为另一个对象提供代理或占位符以控制对它的访问。
代理根据需求可分为三种:
- 远程代理:这些代理负责代表位于远程位置或不同网络的对象,这类似于WCF中的代理类,其中不同网络/位置的客户端使用代理类实例来访问Web服务。
- 虚拟代理:当实际类对象非常重或复杂时使用这些代理,虚拟代理将通过按需实例化它来提供对实际对象的一些即时访问,由于实际对象的实例化在内存方面会很昂贵,所以它将用代理类表示,当需求到来时,只会实例化实际对象。
- 保护代理:这些代理用作代理服务器以限制对资源的访问,大多数组织使用此代理来限制用户在其网络中的访问。
代理设计模式

上述UML图中的参与者是:
- Subject:该接口由实际类和代理类共同实现,这就是代理类可以替代实际类的原因,它是实际类和代理类的通用接口。
- RealSubject:此类是由代理类表示的实际类。
- 代理:此类代表实际类。
- 客户端:这是想要访问实际类功能的第三方。
C#中的代理设计模式示例
以下简单的例子可以让大家理解C#中的享元设计模式。
问题陈述
真实类对象包含多边形形状的细节,将使用代理类访问多边形类的详细信息。
类图

C#中的代理设计模式代码
using System;
namespace ProxyPatternDemo
{
public interface IShape
{
string GetShape();
}
public class RealPolygon : IShape
{
public void Details()
{
Console.WriteLine("This is real polygon Class");
}
public string GetShape()
{
return "This is polygon shape from real/ actual class";
}
}
public class ProxyPolygon : IShape
{
IShape _shape;
public void Details()
{
Console.WriteLine("This is Proxy polygon Class");
}
public string GetShape()
{
_shape = new RealPolygon();
return _shape.GetShape();
}
}
class Program
{
static void Main(string[] args)
{
ProxyPolygon proxyClass = new ProxyPolygon();
proxyClass.Details();
string RealPolygonDetails = proxyClass.GetShape();
Console.WriteLine(RealPolygonDetails);
Console.ReadLine();
}
}
}
结果如下所示:

…
以上是3D天堂关于C#中的代理设计模式的全部内容,如果你有任何反馈,请随时在本页面下方留言。