class Program { static void Main(string[] args) { //创建一个代理对象 并发出请求 Person proxy = new Friend(); proxy.BuyProduct(); Console.Read(); } } //抽象主题角色 public abstract class Person { public abstract void BuyProduct(); } //真实主题角色 public class RealBuyPerson : Person { public override void BuyProduct() { Console.WriteLine("帮我买个苹果手机和苹果电脑"); } } //代理主题角色 public class Friend : Person { //引用真实主题实例 RealBuyPerson RealSubject; public override void BuyProduct() { Console.WriteLine("通过代理类访问真实实体对象的方法"); if (RealSubject == null) { RealSubject = new RealBuyPerson(); } //调用真实的主题方法 RealSubject.BuyProduct(); this.PreBuyProduct(); this.PostProduct(); } //代理角色执行一些操作 public void PreBuyProduct() { //买东西,列个清单,买的东西比较多 Console.WriteLine("我怕弄糊涂了,需要列一张清单,张三:手机,李四:要带电脑..........."); Console.WriteLine("买手机..........."); Console.WriteLine("买电脑..........."); Console.WriteLine("..........."); } //买完东西后 开始给朋友分发 public void PostProduct() { Console.WriteLine("买完了。。开始分东西,张三 手机,李四 电脑…………"); } }
优点:
- 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
- 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。
缺点:
- 由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
- 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。
原文地址http://www.cnblogs.com/zhili/p/ProxyPattern.html