Aqu*_*irl 0 oop design-patterns
在Head First Design Patterns书中,作者经常说应该编程接口而不是实现?
那是什么意思?
让我们用以下代码来说明它:
namespace ExperimentConsoleApp
{
class Program
{
static void Main()
{
ILogger loggerA = new DatabaseLogger();
ILogger loggerB = new FileLogger();
loggerA.Log("My message");
loggerB.Log("My message");
}
}
public interface ILogger
{
void Log(string message);
}
public class DatabaseLogger : ILogger
{
public void Log(string message)
{
// Log to database
}
}
public class FileLogger : ILogger
{
public void Log(string message)
{
// Log to File
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设您是Logger开发人员,应用程序开发人员需要Logger您.你给应用程序开发人员你的ILogger界面,你告诉他他可以使用,但他不必担心实现细节.
之后,您开始开发a FileLogger并Databaselogger确保它们遵循您为Application开发人员提供的界面.
应用程序开发人员现在正在针对接口而不是实现进行开发.他不知道或不关心课程的实施方式.他只知道界面.这促进了代码中较少的耦合,并使您能够(通过配置文件)轻松切换到另一个实现.