定义

为其他对象提供一种代理以控制对这个对象的访问

使用场景

不方便和不适合做的职责交给代理去做
比如中介、媒婆、邮差、代购、远程代理

代码实现

//共同职责
abstract class Subject
{
     public abstract void Request();
}

//真实对象
class RealSubject: Subject
{
     public override void Request()
     {
          Console.WriteLine("真实的请求");
     }
}


//代理,需要创建真实对象
class Proxy: Subject
{
    RealSubject rs;
    public override void Request()
    {
        if (rs == null)
        {
            rs = new RealSubject();
        }
        rs.Request();
    }
}


void Main()
{
    Proxy p = new Proxy();
    p.Request();
}

优点

中介隔离作用
开闭原则,增加功能
职责清晰。 高扩展性。 智能化

缺点

1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂