前言
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象得访问,这样可以隐藏一个对象存在于不同地址空间得事实。
一、接口
定义一个给妹子送花得接口,让代理类和追求者类继承
1 /// <summary>
2 /// 送礼物接口
3 /// </summary>
4 public interface IGiveGift
5 {
6 void GiveFlowers();
7 }
二、被追求的妹妹类
就一个妹妹的名字的字段
1 public class Girl
2 {
3 public string Name { get; set; }
4 }
三、屌丝类
1、继承送礼物接口类
2、通过构造函数把要送花的妹子传进去
3、实现接口,屌丝要给妹子送花了
1 /// <summary>
2 /// 追求者实现“送礼物”接口
3 /// </summary>
4 public class Pursuit : IGiveGift
5 {
6 Girl girl;
7 public Pursuit(Girl girl)
8 {
9 this.girl = girl;
10 }
11 public void GiveFlowers()
12 {
13 Console.WriteLine("给 "+ girl.Name+" 送花");
14 }
15 }
四、代理类
1、代理类继承接口
2、通过构造函数传入屌丝追求者类
3、实现接口,并执行了追求者类的送花
1 /// <summary>
2 /// 代理类也实现送礼物接口
3 /// </summary>
4 public class Proxy : IGiveGift
5 {
6 Pursuit gg;
7 public Proxy(Girl mm)
8 {
9 gg = new Pursuit(mm);
10 }
11 /// <summary>
12 /// 实现追求者类得相关方法
13 /// </summary>
14 public void GiveFlowers()
15 {
16 gg.GiveFlowers();
17 }
18 }
五、测试
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Girl mm = new Girl();
6 mm.Name = "小甜甜";
7
8 Proxy p = new Proxy(mm);
9 p.GiveFlowers();
10 Console.ReadKey();
11 }
12 }
打印结果:给 小甜甜 送花
总结:
1、远程代理,为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。这样就可以达到性能的最优化。
3、安全代理,用来控制真是对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
4、智能指引,指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用次数。
参考书籍:大话设计模式