依赖倒转原则(Dependency Inversion  Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对抽象(接口)编程,而不是针对实现细节编程。

开闭原则(OCP)是面向对象设计原则的基础也是整个设计的一个终极目标,而依赖倒置原则(DIP )则是实现OCP原则的一个基础,换句话说开闭原则(OCP)是你盖一栋大楼的设计蓝图,那么依赖倒置原则就是盖这栋大楼的一个钢构框架,没有钢构架构是很难顺利盖起一栋大楼的,同样的在面向对象软件设计的过程中不遵守依赖倒置原则是很难开发出符合开闭原则的软件的。更不用说开发出易于维护,易于升级的软件。 因此开闭原则是非常重要的一个原则,它有很强的实操性,并且能够直接指导我们写代码代码。

通常要符合这个原则的第一步就是针对抽象编程,类之间的依赖关系尽量去使用高层抽象不要使用底层的实现细节,从软件工程来说高层抽象是较稳定的,也就是说抽象具有一定的稳定性,而实现细节较不稳定,也就是说实现细节具有易变性,而我们期望软件具有更好的稳定性,显而易见我们在开发的时候自然而然的要走稳定路线(依赖抽象编程)。这个原则也是对软件工程中要求“高聚低偶”实践一个保障和指导。

我们来看一个例子假设我们在开发一个软件产品需要一个日志系统,要将系统产生的一些重要事情记录在记事本上。通常我们的实现如下:

    public class Logger
    {        public void Info(string infoText)
        {
            Console.WriteLine($"[{DateTime.Now}][Info]:{infoText}");
        }        public void Debug(string debugText)
        {
            Console.WriteLine($"[{DateTime.Now}][Debug]:{debugText}");
        }        public void Warn(string warmText)
        {
            Console.WriteLine($"[{DateTime.Now}][Warm]:{warmText}");
        }        public void Error(string errorText,Exception exception)
        {
            Console.WriteLine($"[{DateTime.Now}][Error]:{errorText} - Exception:{exception.Message}");