# 代理模式
属于结构型模式。
代理模式为其他对象提供一种代理以控制对这个对象的访问。
按职责来划分,通常有以下使用场景:
- 远程代理
- 虚拟代理
- Copy-on-Write 代理
- 保护(Protect or Access)代理
- Cache 代理
- 防火墙(Firewall)代理
- 同步化(Synchronization)代理
- 智能引用(Smart Reference)代理。
# 类图
- 创建接口,由具体的类实现接口
- 创建代理类,实现接口
# 代码
# 接口
| namespace StructuralPattern_ProxyPattern |
| { |
| public interface IShape |
| { |
| |
| |
| |
| public void MyShape(); |
| } |
| } |
# 实现接口的类
| namespace StructuralPattern_ProxyPattern |
| { |
| |
| |
| |
| public class Square : IShape |
| { |
| public void MyShape() |
| { |
| Console.WriteLine("Square"); |
| } |
| } |
| } |
| namespace StructuralPattern_ProxyPattern |
| { |
| |
| |
| |
| public class ProxySquare : IShape |
| { |
| private Square RealSquare; |
| |
| public void MyShape() |
| { |
| Console.WriteLine("ProxySquare"); |
| |
| if (RealSquare == null) |
| { |
| RealSquare = new Square(); |
| } |
| RealSquare.MyShape(); |
| } |
| } |
| } |
# 测试
| namespace StructuralPattern_ProxyPattern |
| { |
| public class Program |
| { |
| private static void Main() |
| { |
| IShape shape = new ProxySquare(); |
| shape.MyShape(); |
| } |
| } |
| } |