ここにアダプタパターンの例があります(はい、正しく実装されているかどうかを確認できます)が、私の本当の質問はここにあります。アダプタデザインパターンは次のことを行うと言われています。「クラスのインターフェイスを別のインターフェイスクライアントに変換します。アダプターを使用すると、インターフェースに互換性がないために他の方法では機能しなかったクラスを連携させることができます。」しかし、私はそのステートメントに少し混乱しています。以下のコードに基づいて、私は完全には理解していません。それがどこで発生したかを知りたいです。
これが私のクラス/インターフェースです:
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();
}
}