经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Adapter适配器模式
来源:cnblogs  作者:大师兄石头  时间:2021/2/18 15:34:46  对本文有异议

>>返回《C#常用设计模式》

1. 简介

  1. 概述
    • 将一个类的接口转换成客户希望的另外一个接口。
  2. 解决的问题
    • 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
  3. 适配器模式中的角色
    1. 目标接口(Target):程序调用所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
    2. 需要适配的类(Adaptee):需要被适配的类或适配者类;
    3. 适配器(Adapter):通过包装一个适配两者的对象,将原接口与目标接口适配;
    4. 比喻:好比手机充电,不同的国家使用不同电压的电源,我们手机充电需要不同的适配器来适配电压
      • Adaptee: 家用电源
      • Target: 手机电源接口
      • Adapter: 手机充电器
  4. 适配器模式的类图

    适配接口可采用实现Target接口和继承Adaptee类的方式。

    适配两个类,可采用继承Target类和依赖Adaptee对象的方式

2. 示例

  1. /// <summary>
  2. /// 定义客户端期待的接口
  3. /// </summary>
  4. public class Target
  5. {
  6. /// <summary>
  7. /// 使用virtual修饰以便子类可以重写
  8. /// </summary>
  9. public virtual void Request()
  10. {
  11. Console.WriteLine("This is a common request");
  12. }
  13. }
  14. /// <summary>
  15. /// 定义需要适配的类
  16. /// </summary>
  17. public class Adaptee
  18. {
  19. public void SpecificRequest()
  20. {
  21. Console.WriteLine("This is a special request.");
  22. }
  23. }
  24. /// <summary>
  25. /// 定义适配器
  26. /// </summary>
  27. public class Adapter:Target
  28. {
  29. // 建立一个私有的Adeptee对象
  30. private Adaptee adaptee = new Adaptee();
  31. /// <summary>
  32. /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
  33. /// </summary>
  34. public override void Request()
  35. {
  36. adaptee.SpecificRequest();
  37. }
  38. }
  39. //Client代码
  40. class Program
  41. {
  42. static void Main(string[] args)
  43. {
  44. // 对客户端来说,调用的就是Target的Request()
  45. Target target = new Adapter();
  46. target.Request();
  47. Console.Read();
  48. }
  49. }

3. 说明

  1. 适配器模式是典型的面向抽象设计
  2. 已有的抽象实现弃用,而且有可兼容的封装可以使用,则很适合使用此模式
  3. 比如:sdk更换、数据库访问驱动的更换、数据传输方式的更换等等

原文链接:http://www.cnblogs.com/BigBrotherStone/p/adapter.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号