千家信息网

.NET适配器模式简介

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍".NET适配器模式简介",在日常操作中,相信很多人在.NET适配器模式简介问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答".NET适配器模式简介"的疑惑
千家信息网最后更新 2025年11月12日.NET适配器模式简介

这篇文章主要介绍".NET适配器模式简介",在日常操作中,相信很多人在.NET适配器模式简介问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答".NET适配器模式简介"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

适配器模式简介:

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

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

适配器模式结构图:

引入实例进行说明:

以日志记录程序为Demo说明,在任何一套软件中都会有对应的日志管理模块,假如如果我们在开发软件中的日记记录采用第三方的日志组件进行日志记录,它采用的是Log.Write("写日志");的方式我们的程序在开发中,大量实例化日记记录对象,采用的Log.Write()方式进行日志记录,但是现在第三方的日志组件现在不免费了,需要收费了,于是我们打算使用一种新的日志管理模块,只不过它提供给我们的API接口是采用Log.WriteLog("新的写日志的方式");进行日志记录。这个时候问题就出现了,如何应对这种迁移的变化

类适配器模式

1.原来日志的接口,采用的是Write("写日志");方法

  ///   /// 原来的日志记录接口  ///   public interface ILogTarget  {    ///     /// 原来的写日志方法    ///     void Write(string info);  }

2.然而现在的写日志的接口,采用的是WriteLog("写日志");里面实现了写日志的新的方式:将日志写到文件中,数据库中

  ///   /// 抽象写日志类  ///   public abstract class LogAdaptee  {    ///     /// 写日志    ///     public abstract void WriteLog(string info);  }
  ///   /// 写文件日志记录  ///   public class FileLog:LogAdaptee  {    ///     /// 写日志到文件中    ///     public override void WriteLog(string info)    {      Console.WriteLine("记录到文本文件:"+info);    }  }
  ///   /// 往数据库中写日志  ///   public class DatabaseLog:LogAdaptee  {    ///     /// 重写写日志方法    ///     public override void WriteLog(string info)    {      Console.WriteLine("记录到数据库:"+info);    }  }

3.如何使用者两个新对象中的方式,替换原来的写日志的方式?

  ///   /// 采用新的写日志的方式,写入到数据库中  ///   public class DatabaseLogAdapter:DatabaseLog,ILogTarget  {    ///     /// 在重写ILogTarget接口中的的Write方法里面调用新的写日志的方式WriteLog    ///     public void Write(string info)    {      WriteLog(info);    }  }  ///   /// 采用新的写日志的方式,写入到文本文件  ///   public class FileLogAdapter : FileLog, ILogTarget  {    ///     /// 在重写ILogTarget接口中的的Write方法里面调用新的写日志的方式WriteLog    ///     public void Write(string info)    {      this.WriteLog(info);    }  }

4.调用依据使用的原来写日志的方法,但是确实使用的新的写日志的方式:

  ///   /// 类 适配器模式(Adapter Pattern)  ///   class Program  {    static void Main(string[] args)    {      ILogTarget dbLog = new DatabaseLogAdapter();      dbLog.Write("程序启动成功");      dbLog = new FileLogAdapter();      dbLog.Write("程序启动成功");    }  }

对象适配器模式

1.方式采用的是类适配器的方式实现了新的日志功能的迁移变化,下面我们使用对象适配器,可以区别发现两种方式的特别之处。原来写日志的方法依旧不变:Write("写日志");

  ///   /// 原来的日志记录接口  ///   public interface ILogTarget  {    ///     /// 原来的写日志方法    ///     void Write(string info);  }

2.现在的写日志的接口,采用的是WriteLog("写日志");里面实现了写日志的新的方式:将日志写到文件中,数据库中:

  ///   /// 抽象写日志类  ///   public abstract class LogAdaptee  {    ///     /// 写日志    ///     public abstract void WriteLog(string info);  }
  ///   /// 写文件日志记录  ///   public class FileLog:LogAdaptee  {    ///     /// 写日志到文件中    ///     public override void WriteLog(string info)    {      Console.WriteLine("记录到文本文件:"+info);    }  }
  ///   /// 往数据库中写日志  ///   public class DatabaseLog:LogAdaptee  {    ///     /// 重写写日志方法    ///     public override void WriteLog(string info)    {      Console.WriteLine("记录到数据库:"+info);    }  }

3.上面我们添加了FileLogAdapter 类,DatabaseLogAdapter类,继承了FileLog,DatabaseLog, ILogTarget接口,重写Write方法里面调用新的写日志的方式WriteLog,使用这样的方式进行了迁移变化。下面使用对象适配:

  ///   /// 对象适配,继承ILogTarget,里面有LogAdaptee抽象日志类对象。  ///   public class LogAdapter:ILogTarget  {    ///     /// 抽象写日志类    ///     private LogAdaptee _adaptee;    public LogAdapter(LogAdaptee adaptee)    {      this._adaptee = adaptee;    }    public void Write(string info)    {      _adaptee.WriteLog(info);    }  }

4.在程序中的调用:

  ///   /// 对象适配器模式(Adapter Pattern)  ///   class Program  {    static void Main(string[] args)    {      ILogTarget dbLog = new LogAdapter(new DatabaseLog());      dbLog.Write("程序启动成功");      ILogTarget fileLog = new LogAdapter(new FileLog());      fileLog.Write("程序启动成功");    }  }

比较两者的迁移变化,在类适配方式中,我们得到的适配器类DatabaseLogAdapter和FileLogAdapter具有它所继承的父类的所有的行为,同时也具有接口ILogTarget的所有行为,这样其实是违背了面向对象设计原则中的类的单一职责原则,而对象适配器则更符合面向对象的精神,所以在实际应用中不太推荐类适配这种方式。假设我们要适配出来的类在记录日志时同时写入文件和数据库,那么用对象适配器我们会这样去写:

  ///   /// 对象适配,继承ILogTarget,里面有LogAdaptee抽象日志类对象。  ///   public class LogAdapter:ILogTarget  {    ///     /// 抽象写日志类    ///     private LogAdaptee _adapteed;    ///     /// 抽象写日志类    ///     private LogAdaptee _adapteef;    public LogAdapter(LogAdaptee adapteed, LogAdaptee adapteef)    {      this._adapteed = adapteed;      this._adapteef = adapteef;    }    public void Write(string info)    {      _adapteed.WriteLog(info);      _adapteef.WriteLog(info);    }  }

调用:

  ///   /// 对象适配器模式(Adapter Pattern)  ///   class Program  {    static void Main(string[] args)    {      //同时写日志到文件和数据库      ILogTarget dbLog = new LogAdapter(new FileLog(), new DatabaseLog());      dbLog.Write("程序启动成功");    }  }

如果改用类适配器:我们难道使用这样的写法达到目的?

  public class DatabaseLogAdapter : DatabaseLog, FileLog, ILogTarget  {    public void Write(string info)    {      this.WriteLog(info);    }  }

结果肯定是不能的,一个类不能具有多个基类,这样写明细有错误。所有针对不同的情况,我们应该采用合适的方式去进行适配调度。

到此,关于".NET适配器模式简介"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

日志 适配 方式 适配器 接口 对象 模式 文件 方法 数据 数据库 程序 简介 成功 变化 学习 工作 同时 文本 原则 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 在数据库中对个别用户看到和使用 农行分布式数据库腾讯 环世界用什么软件开发的 无线网络安全审计管理系统 网络安全校园日标语 mac未找到服务器 江西云链信息网络技术有限公司 智慧服务器解决方案 我的世界天空巨人是哪个服务器 sql附加数据库时出错 国电通网络技术与国网信通 网络安全加固工程建设 常用数据库语句 中学生网络安全教育论文 方舟服务器怎么找回恐龙 软件开发专业w 怎样查找自己电脑服务器ip 外省计算机网络技术学院有哪些 前端html怎么连接数据库 注册会计师行业经济数据库 江北专业软件开发项目 单位网络安全防护预案 云手机服务器怎么装 中国梦进入数据库的人能挣钱吗 桢正电机与桢正服务器的连接 数据库技术与应用网考答案 威科法律百科全书数据库 服务器查看nodejs 国内公司是如何保护网络安全的 网络安全维护股票
0