# 代理模式
属于结构型模式。
代理模式为其他对象提供一种代理以控制对这个对象的访问。
按职责来划分,通常有以下使用场景:
- 远程代理
- 虚拟代理
- Copy-on-Write 代理
- 保护(Protect or Access)代理
- Cache 代理
- 防火墙(Firewall)代理
- 同步化(Synchronization)代理
- 智能引用(Smart Reference)代理。
# 类图
- 创建接口,由具体的类实现接口
- 创建代理类,实现接口

# 代码
# 接口
namespace StructuralPattern_ProxyPattern | |
{ | |
public interface IShape | |
{ | |
/// <summary> | |
/// 形状 | |
/// </summary> | |
public void MyShape(); | |
} | |
} |
# 实现接口的类
namespace StructuralPattern_ProxyPattern | |
{ | |
/// <summary> | |
/// 正方形 | |
/// </summary> | |
public class Square : IShape | |
{ | |
public void MyShape() | |
{ | |
Console.WriteLine("Square"); | |
} | |
} | |
} |
namespace StructuralPattern_ProxyPattern | |
{ | |
/// <summary> | |
/// 正方形的代理 | |
/// </summary> | |
public class ProxySquare : IShape | |
{ | |
private Square RealSquare; | |
public void MyShape() | |
{ | |
Console.WriteLine("ProxySquare"); | |
if (RealSquare == null) | |
{ | |
RealSquare = new Square(); | |
} | |
RealSquare.MyShape(); | |
} | |
} | |
} |
# 测试
- 使用 ProxySquare 访问 Square
namespace StructuralPattern_ProxyPattern | |
{ | |
public class Program | |
{ | |
private static void Main() | |
{ | |
IShape shape = new ProxySquare(); | |
shape.MyShape(); | |
} | |
} | |
} |
运行结果:
ProxySquare
Square