我在這裏有一個適配器模式的例子(是的,你可以檢查它是否正確實現),但我真正的問題是在這裏,據說適配器設計模式執行以下操作:「將類的接口轉換爲另一個接口客戶端期望。適配器讓類能夠協同工作,否則因爲不兼容的接口而無法工作。「但是我對這個陳述有點困惑,我不完全基於我的代碼,我想知道它發生在哪裏。適配器設計模式在C#中如何工作?
這裏是我的類/接口:
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();
}
}
您的適配器InfrastructureLoggerToDatabaseAdapter實際上命名不正確。它正在接收一個IRepository類型的對象並將其轉換爲一個ILogger類型。所以它實際上應該被稱爲DatabaseToInfrastructureLoggerAdapter或者更確切地說是RepositoryToLoggerAdapter。 – Tushar 2013-03-14 15:47:36