适配器模式解说
我们还是以日志记录程序为例子说明Adapter模式。现在有这样一个场景:假设我们在软件开发中要使用一个第三方的日志记录工具,该日志记录工具支持数据库日志记录DatabaseLog和文本文件记录FileLog两种方式,它提供给我们的API接口是Write()方法,使用方法如下:
Log.Write("Logging Message!");
当软件系统开发进行到一半时,处于某种原因不能继续使用该日志记录工具了,需要采用另外一个日志记录工具,它同样也支持数据库日志记录DatabaseLog和文本文件记录FileLog两种方式,只不过它提供给我们的API接口是WriteLog()方法,使用方法如下:
Log.WriteLog("Logging Message!");
该日志记录工具的类结构图如下:
图4日志记录工具类结构图
它的实现代码如下:
在我们开发完成的应用程序中日志记录接口中(不妨称之为ILogTarget接口,在本例中为了更加清楚地说明,在命名上采用了Adapter模式中的相关角色名字),却用到了大量的Write()方法,程序已经全部通过了测试,我们不能去修改该接口。代码如下:public abstract class LogAdaptee { public abstract void WriteLog(); } public class DatabaseLog:LogAdaptee { public override void WriteLog() { Console.WriteLine("Called WriteLog Method"); } } public class FileLog:LogAdaptee { public override void WriteLog() { Console.WriteLine("Called WriteLog Method"); } }
public interface ILogTarget { void Write(); }