Bootstrap

C# 适配器模式

在C#中,适配器模式(Adapter Pattern)是一种常用的设计模式,用于解决接口不兼容的问题。它允许将一个类的接口转换成客户端所期望的另一种接口,从而使得原本因接口不匹配而无法一起工作的两个类能够协同工作。

C#中实现适配器模式的步骤

  1. 定义目标接口(Target):这是客户端期望调用的接口。
  2. 定义被适配类(Adaptee):这是需要适配的类,其接口与客户端期望的接口不一致。
  3. 创建适配器类(Adapter):这个类实现了目标接口,并持有一个被适配类的实例。在适配器类的方法中,它会调用被适配类的相应方法,以完成接口转换。

示例

假设我们有一个老旧的日志系统OldLogSystem,它有一个Log方法接受一个字符串作为参数。现在,我们想要使用一个新的日志框架,该框架要求日志方法接受一个LogMessage对象。为了将OldLogSystem集成到新的日志框架中,我们可以使用适配器模式。

第一步:定义目标接口
 

csharp复制代码

public interface ILogger
{
void Log(LogMessage message);
}
public class LogMessage
{
public string Level { get; set; }
public string Message { get; set; }
// 构造函数、其他方法等...
}
第二步:定义被适配类
 

csharp复制代码

public class OldLogSystem
{
public void Log(string message)
{
// 旧的日志记录逻辑
Console.WriteLine($"Old Log System: {message}");
}
}
第三步:创建适配器类
 

csharp复制代码

public class OldLogSystemAdapter : ILogger
{
private OldLogSystem _oldLogSystem;
public OldLogSystemAdapter(OldLogSystem oldLogSystem)
{
_oldLogSystem = oldLogSystem;
}
public void Log(LogMessage message)
{
// 将LogMessage对象转换为OldLogSystem所需的字符串格式
string formattedMessage = $"[{message.Level}] {message.Message}";
_oldLogSystem.Log(formattedMessage);
}
}

使用适配器

现在,我们可以在客户端代码中通过适配器来使用OldLogSystem了:

 

csharp复制代码

class Program
{
static void Main(string[] args)
{
OldLogSystem oldLogSystem = new OldLogSystem();
ILogger logger = new OldLogSystemAdapter(oldLogSystem);
LogMessage message = new LogMessage
{
Level = "INFO",
Message = "This is a test message."
};
logger.Log(message); // 这将调用OldLogSystem的Log方法
}
}

总结

在这个例子中,OldLogSystemAdapter类充当了适配器,它实现了ILogger接口,并将LogMessage对象转换为OldLogSystem能够理解的字符串格式。这样,我们就可以在不修改OldLogSystem代码的情况下,将其集成到新的日志框架中。这就是C#中适配器模式的一个简单应用示例。

;