代理模式(Proxy)为其他对象提供一种代理以控制对先喝个对象的访问。由抽象角色(接口或抽象类声明真实角色的方法)、代理角色(实现抽象类,通过真实角色的方法来实现抽象方法,并可以附加自己的操作)、真实角色(实现抽象角色,定义真实角色所要实现的方法)

abstract class Subject { public abstract void Request(); }

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

class Proxy : Subject { RealSubject realSubject; public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); } Console.WriteLine("看,灰机!"); realSubject.Request(); } }

static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); Console.Read(); }
代理模式的优点:
职责清晰,真实角色只是实现实际的业务逻辑;中介作用,可以用来控制对真实对象的访问权限;可扩展。