索引
为其他对象提供一种代理以控制对这个对象的访问。
Provide a surrogate or placeholder for another object to control access to it.
运行时一种可能的 Proxy 结构的对象图:
Proxy
Subject
RealSubject
下面是一些使用 Proxy 模式的常见情况:
实现方式(一):使用相同 Subject 接口实现 Proxy。
对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。
1 namespace ProxyPattern.Implementation1 2 { 3 public abstract class Subject 4 { 5 public abstract string Name { get; } 6 public abstract void Request(); 7 } 8 9 public class ConcreteSubject : Subject 10 { 11 private string _name; 12 13 public ConcreteSubject(string name) 14 { 15 _name = name; 16 } 17 18 public override string Name { get { return _name; } } 19 20 public override void Request() 21 { 22 // do something 23 } 24 } 25 26 public class Proxy : Subject 27 { 28 private Subject _realSubject = null; 29 private string _name; 30 31 public Proxy(string name) 32 { 33 _name = name; 34 } 35 36 public override string Name { get { return _name; } } 37 38 public override void Request() 39 { 40 if (_realSubject == null) 41 LoadRealSubject(); 42 43 _realSubject.Request(); 44 } 45 46 private void LoadRealSubject() 47 { 48 // do some heavy things 49 _realSubject = new ConcreteSubject(_name); 50 } 51 } 52 53 public class Client 54 { 55 public void TestCase1() 56 { 57 Subject subject = new Proxy("SubjectName"); 58 var subjectName = subject.Name; 59 subject.Request(); 60 } 61 } 62 }
《设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。
设计模式之美:Proxy(代理),布布扣,bubuko.com
原文:http://www.cnblogs.com/gaochundong/p/design_pattern_proxy.html