一、设计程序
using System;
public interface ILogger
{
void Log(string message);
}
public class FileLogger : ILogger
{
public void Log(string message)
{
// 将日志写入文件
System.IO.File.AppendAllText("data.txt", message + "\n");
}
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
// 将日志输出到控制台
Console.WriteLine(message);
}
}
public class Program
{
static void Main(string[] args)
{
ILogger consoleLogger = new ConsoleLogger();//就像父类 = new 子类() 一样
ILogger fileLogger = new FileLogger();
consoleLogger.Log("日志内容");//接口.方法是为了解耦
fileLogger.Log("日志内容");
}
}
二、分析
【原则】
接口实现继承接口定义,接口实现必须含有接口定义的所有方法
【面向接口编程】
1. 扩展灵活性:不修改现有代码可轻松添加其他日志实现,例如 `DatabaseLogger` ,只需实现 `ILogger` 接口。
2. 解耦:`Program` 类与具体的日志实现(`FileLogger` 和 `ConsoleLogger`)解耦,只依赖于接口 `ILogger`,不依赖于具体实现,使得代码模块化。
3. 测试方便:在测试 `Program` 类时,你可以用模拟对象替代真实的 `ILogger` 实现,方便进行单元测试。4.多态性:同个接口,不同实现。