"编程到接口"和"编程到实现"是什么意思?

Aqu*_*irl 0 oop design-patterns

Head First Design Patterns书中,作者经常说应该编程接口而不是实现?

那是什么意思?

Wou*_*ort 5

让我们用以下代码来说明它:

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 FileLoggerDatabaselogger确保它们遵循您为Application开发人员提供的界面.

应用程序开发人员现在正在针对接口而不是实现进行开发.他不知道或不关心课程的实施方式.他只知道界面.这促进了代码中较少的耦合,并使您能够(通过配置文件)轻松切换到另一个实现.