当前位置: 网学 > 编程文档 > 其他类别 > 正文

设计模式系列之代理模式

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/12
问了,那代理模式具体的定义是什么呀?到底什么是代理模式下?别着急继续往下看吧。

2、代理模式

代理(Proxy)模式定义:为其他对象提供一种代理以控制对这个对象的访问。 类图如下:

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/4B12236725.jpg" />

这时我们发现了多了一个接口ICounter,那么实现了接口的代理类与具体类的代码如下:

  1. /// <summary> /// 柜台类也就是具体类提供的功能规则  
  2. /// </summary>  
  3. public interface ICounter  
  4. {  
  5.  void ActivationCard(Card card);  
  6. }  
  7. /// <summary> /// 热心肠的老李  
  8. /// </summary>  
  9. public class MrLi : ICounter  
  10. {  
  11. //激活工卡方法  
  12. public void ActivationCard(Card card)  
  13. {  
  14. Counter.Instance.ActivationCard(card);  
  15. }  
  16. }  
  17. /// <summary> /// 柜台类  
  18. /// </summary>  
  19. public sealed class Counter : ICounter  
  20. {  
  21. //在第一次调用类成员时,初始化唯一实例  
  22. private static readonly Counter instance = new Counter();  
  23. private Counter()  
  24. {  
  25. }  
  26. //返回类型实例属性  
  27. public static Counter Instance  
  28. {  
  29. get 
  30. {  
  31. return instance;  
  32. }  
  33. }  
  34. //激活工卡方法  
  35. public void ActivationCard(Card card)  
  36. {  
  37. //激活工卡的过程  
  38. Console.WriteLine("{0}的工卡激活成功!",card.CardName);  
  39. }  

那么这个接口有什么用呢?

在面向对象设计中,对象之间需要进行交互和通信。例如:上面的代理类MrLi调用了具体类柜台类counter的激活卡片的方法(ActiviationCard),那么这个时候代理类MrLi不在代理counter柜台的激活卡片功能了,而是去另一个counterNew的柜台去激活,但是counterNew柜台激活卡片的方法是(CounterActiviationCard),怎么办?我们需要去修改调用counter的类,那么如何降低耦合性呢?当然就是将接口和实现分离开来,这样组件间和日志对象之间的依赖就是基于接口,而不是实现!

例如:目前MrLi与counter之间的调用如下:

  1. /// <summary> /// 热心肠的老李  
  2. /// </summary>  
  3. public class MrLi  
  4. {  
  5. //激活工卡方法  
  6. public void ActivationCard(Card card)  
  7. {  
  8.  Counter.Instance.ActivationCard(card);  
  9. }  
  10. }  
  11. 那么如果需要加入新的柜台类(counterNew),它的激活方法叫(CounterActivationCard),代码如下:  
  12. /// <summary> /// 新的柜台类  
  13. /// </summary>  
  14. public sealed class NewCounter  
  15. {  
  16. //在第一次调用类成员时,初始化唯一实例  
  17. private static readonly NewCounter instance = new NewCounter();  
  18. private NewCounter()  
  19. {  
  20.  }  
  21. //返回类型实例属性  
  22. public static NewCounter Instance  
  23.  {  
  24. get 
  25. {  
  26. return instance;  
  27. }  
  28. }  
  29. //激活工卡方法  
  30. public void CounterActivationCard(Card card)  
  31. {  
  32. //激活工卡的过程  
  33. Console.WriteLine("{0}的工卡激活成功!", card.CardName);  
  34. }  

  • 下一篇资讯: 企业应用架构模式
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号