代理模式(Proxy)
定义
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
类图
描述
Subject,定义了ConcreteSubject和Proxy的共用接口,这样就可以在任何使用ConcreteSubject的地方使用Proxy;
Proxy,保存一个ConcreteSubject引用使得Proxy可以访问ConcreteSubject实体,并提供一个与Subject相同的接口,这样Proxy就可以用来替代ConcreteSubject;
ConcreteSubject,定义Proxy所代理的真实实体。
应用场景
之前访问google的时候,Client只需要发送一个Request给google服务器,google服务器在接收到这个请求之后就会把页面Response给Client。
虽然现在不能直接访问google了,但是有时候Client又希望能够用到google,此时就可以使用代理,让代理服务器帮忙转发Client的请求。
类图如下:
public abstract class WebSite { public abstract void Request(string url); public abstract string Response(); } public class Google : WebSite { public override void Request(string url) { Console.WriteLine("get " + url); } public override string Response() { return "Google"; } } public class Proxy : WebSite { private Google google; public Proxy(Google google) { this.google = google; } public override void Request(string url) { this.google.Request(url); } public override string Response() { return this.google.Response(); } }