• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# 设计模式系列教程-适配器模式

C# 设计模式系列教程-适配器模式

作者:Wang Juqiang 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Wang Juqiang 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1. 概述

  将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

2. 解决的问题

  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

3. 模式中的角色

  3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  3.2 需要适配的类(Adaptee):需要适配的类或适配者类。

  3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  

4. 模式解读

  注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。

  4.1 适配器模式的类图

/UpFiles/2017/5/28/2016060110534921.png

  4.2 适配器模式的代码实现

 /// <summary>
 /// 定义客户端期待的接口
 /// </summary>
 public class Target
 {
  /// <summary>
  /// 使用virtual修饰以便子类可以重写
  /// </summary>
  public virtual void Request()
  {
   Console.WriteLine("This is a common request");
  }
 }

 /// <summary>
 /// 定义需要适配的类
 /// </summary>
 public class Adaptee
 {
  public void SpecificRequest()
  {
   Console.WriteLine("This is a special request.");
  }
 }

 /// <summary>
 /// 定义适配器
 /// </summary>
 public class Adapter:Target
 {
  // 建立一个私有的Adeptee对象
  private Adaptee adaptee = new Adaptee();

  /// <summary>
  /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
  /// </summary>
  public override void Request()
  {
   adaptee.SpecificRequest();
  }
 }

</div>

  4.3 客户端代码

 class Program
 {
  static void Main(string[] args)
  {
   // 对客户端来说,调用的就是Target的Request()
   Target target = new Adapter();
   target.Request();

   Console.Read();
  }
 }
</div>

  运行结果

/UpFiles/2017/5/28/2016060110534922.png

5. 模式总结

  5.1 优点

    5.1.1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。

    5.1.2 复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    5.1.3 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

    5.1.4 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

  5.2 缺点

    对于对象适配器来说,更换适配器的实现过程比较复杂。

  5.3 适用场景

    5.3.1 系统需要使用现有的类,而这些类的接口不符合系统的接口。

    5.3.2 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

    5.3.3 两个类所做的事情相同或相似,但是具有不同接口的时候。

    5.3.4 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

    5.3.5 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

6. 适配器应用举例

  6.1 使用过ADO.NET的开发人员应该都用过DataAdapter,它就是用作DataSet和数据源之间的适配器。DataAdapter通过映射Fill和Update来提供这一适配器。

  6.2 手机电源适配器


以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28C# 封装HtmlHelper组件:BootstrapHelper
  • 2017-05-28C#实现获取IIS站点及虚拟目录信息的方法
  • 2017-05-28C#实现向多线程传参的三种方式实例分析
  • 2017-05-28通过特性(attribute)为枚举添加更多信息示例
  • 2017-05-28WPF字体或内容模糊的解决方法
  • 2017-05-28C#往线程里传递参数的方法小结
  • 2017-05-28C#对多个集合和数组的操作方法(合并,去重,判断)
  • 2017-05-28c#事件使用示例详解
  • 2017-05-28C# 中的EventHandler实例详解
  • 2017-05-28如何使用C#读写锁ReaderWriterLockSlim

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#控制台程序中处理2个关闭事件的代码实例
    • C#制作简单的多人在线即时交流聊天室
    • C# Lambda 知识回顾
    • C#无损高质量压缩图片代码
    • c#图片上传和显示的实现方法
    • c#文档图片自动纠偏
    • C#获取网页源代码的方法
    • .net实现文件读写的几种常用方法
    • C#中 paint()与Onpaint()的区别
    • C#版的 Escape() 和 Unescape() 函数分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有