gpt4 book ai didi

c# - 适配器设计模式如何在 C# 中工作?

转载 作者:行者123 更新时间:2023-12-03 20:47:29 24 4
gpt4 key购买 nike

我这里有一个适配器模式的例子(是的,你可以检查它是否被正确实现),但我真正的问题是在这里,据说适配器设计模式做了以下事情:“将一个类的接口(interface)转换成客户期望的另一个接口(interface)。适配器让类一起工作,否则由于不兼容的接口(interface)而无法一起工作。”但是我对那个陈述有点困惑,根据我下面的代码我不太明白,我想知道它发生在哪里。

这是我的类/接口(interface):

public interface ILogger
{
void Write(string data);
}

public class InfrastructureDebugLogger : ILogger
{
public void Write(string data)
{
Debug.WriteLine(data);
}
}

public class InfrastructureLoggerToDatabaseAdapter : ILogger
{
private IRepository<Log> adaptee;

public InfrastructureLoggerToDatabaseAdapter(IRepository<Log> adaptee)
{
this.adaptee = adaptee;
}

public void Write(string data)
{
var log = new Log() { Value = data };
adaptee.Create(log);
}
}

public interface IRepository<T>
{
void Create(T item);
void Update(T item);
T Find(int id);

}

public class Log
{
public int ID { get; set; }
public string Value { get; set; }
}

public class LogRepository : IRepository<Log>
{
public void Create(Log item)
{
Console.WriteLine("Created an item inside the LogRepository");
}

public void Update(Log item)
{
throw new NotImplementedException();
}

public Log Find(int id)
{
throw new NotImplementedException();
}
}

class Program
{
static void Main(string[] args)
{

ILogger logger = new InfrastructureDebugLogger();
Console.Write("Data: ");
string data = Console.ReadLine();
logger.Write(data);
InfrastructureLoggerToDatabaseAdapter loggerToDatabaseAdapter =
new InfrastructureLoggerToDatabaseAdapter(new LogRepository());
loggerToDatabaseAdapter.Write(data);
Console.ReadKey();
}
}

最佳答案

您的代码显示了适配器,但没有显示使用它作为适配器。

为了使用这个适配器,你需要使用你的 LogRepository , 它实现了 IRepository<Log> , 作为 ILogger通过适配器。像这样的东西:

class Program
{
static void Main(string[] args)
{

Console.Write("Data: ");
string data = Console.ReadLine();
InfrastructureLoggerToDatabaseAdapter loggerToDatabaseAdapter =
new InfrastructureLoggerToDatabaseAdapter(new LogRepository());

// Here, you're using a IRepository<Log>, but adapting it to be used as an ILogger...
ILogger logger = loggerToDatabaseAdapter;
logger.Write(data);
Console.ReadKey();
}
}

关于c# - 适配器设计模式如何在 C# 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com