适配器模式(Adapter Pattern):就是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
适配器有类适配器和对象适配器两种类型,二者的意图相同,只是实现的方法和适用的情况不同。类适配器采用继承来实现,对象适配器则采用组合的方法来实现。
我们开发了一个项目,项目中采用了一个第三方的日志组件来记录日志,但是现在第三方日志组件实现的,现在我们自己开发了一个日志组件,我们想把项目中的日志组件替换为我们自己开发的,但是我们自己的开发的日志组件并没有实现第三方组件的接口,这个时候要怎么处理?
- ///
- /// 目标接口
- ///
- public interface ILog
- {
- ///
- /// 写日志的方法
- ///
- public void Write(string logCommand);
- }
- ///
- /// 新开发的的日志接口类
- ///
- public abstract class ILogAbapter
- {
- ///
- /// 新的写日志的方法
- ///
- ///
- public abstract void NewWrite(string logCommand);
- }
-
- ///
- /// 需要适配的数据库日志类
- ///
- public class DbLog : ILogAbapter
- {
- public override void NewWrite(string logCommand)
- {
- Console.WriteLine($"记录到数据库中:{logCommand}");
- }
- }
-
- ///
- /// 需要适配的文件日志类
- ///
- public class FileLog : ILogAbapter
- {
- public override void NewWrite(string logCommand)
- {
- Console.WriteLine($"记录到日志文件中:{logCommand}");
- }
- }
- ///
- /// 对象适配器
- ///
- public class LogAdapter : ILog
- {
- private readonly ILogAbapter _logAdapter = null;
-
- public LogAdapter(ILogAbapter logAdapter)
- {
- _logAdapter = logAdapter;
- }
-
- public void Write(string logCommand)
- {
- _logAdapter.NewWrite(logCommand);
- }
- }
- {
- #region 对象适配器
-
- LogAdapter fileLog = new LogAdapter(new FileLogAdapter());
- fileLog.Write("hello word");
-
- LogAdapter dbLog = new LogAdapter(new DbLogAdapter());
- dbLog.Write("hello word");
-
- #endregion
- }
- ///
- /// 目标接口
- ///
- public interface ILog
- {
- ///
- /// 写日志的方法
- ///
- public void Write(string logCommand);
- }
- ///
- /// 新开发的的日志接口类
- ///
- public abstract class ILogAbapter
- {
- ///
- /// 新的写日志的方法
- ///
- ///
- public abstract void NewWrite(string logCommand);
- }
-
- ///
- /// 需要适配的数据库日志类
- ///
- public class DbLog : ILogAbapter
- {
- public override void NewWrite(string logCommand)
- {
- Console.WriteLine($"记录到数据库中:{logCommand}");
- }
- }
-
- ///
- /// 需要适配的文件日志类
- ///
- public class FileLog : ILogAbapter
- {
- public override void NewWrite(string logCommand)
- {
- Console.WriteLine($"记录到日志文件中:{logCommand}");
- }
- }
- ///
- /// 数据库日志适配器
- ///
- public class DbLogAdapter : DbLog, ILog
- {
- public void Write(string logCommand)
- {
- NewWrite(logCommand);
- }
- }
-
-
- ///
- /// 文件日志适配器
- ///
- public class FileLogAdapter : FileLog, ILog
- {
- public void Write(string logCommand)
- {
- NewWrite(logCommand);
- }
- }
- {
- #region 类适配器
-
- ILog fileLog = new FileLogAdapter();
- fileLog.Write("hello word");
-
- ILog dbLog = new DbLogAdapter();
- dbLog.Write("hello word");
-
- #endregion
- }