设计模式六大原则---依赖倒置原则(DIP)

    定义

   依赖倒置原则(Dependency Inversion Principle)

    核心思想:依赖于抽象

    具体体现:

        体现一:高层模块不应该依赖低层模块。两个都应该依赖抽象。

        体现二:抽象不应该依赖细节。细节应该依赖抽象。

    依赖倒置原则告诉我们:细节是多变的,而抽象是相对稳定的。所以我们编程的时候要注重抽象的编程,而非细节编程。

     实例

    1、AGP插槽:主板和显卡之间的关系的抽象。主板和显卡通常是使用AGP插槽来连接的,这样,只要接口适配,不管是主板还是显卡更换,都不是问题。

      2、驾照:司机和汽车之间关系的抽象。有驾照的司机可以驾驶各种汽车。

      3、电源插座。

      下面我们用一个灯的开关的实例来展示:

       Switch(开关)、Light(灯),统一一个接口IDevices,让Switch和light都继承这个接口,而且这个接口有两个方法,即开/关,代码如下:

      

/// <summary>
    /// 设备
    /// </summary>
    public interface IDevices
    {
        void TurnOn();
        void TurnOff();
    }
    /// <summary>
    /// 电灯
    /// </summary>
    public class Light : IDevices
    {
        public void TurnOn()
        {
            Console.WriteLine("灯泡亮了");
        }
        public void TurnOff()
        {
            Console.WriteLine("灯泡黑了");
        }
    }
    /// <summary>
    /// 开关
    /// </summary>
    public class Switch:IDevices
    {
        IDevices devices;
        public Switch (IDevices devices)
        {
            this.devices =devices ;
        }
        public void TurnOn()
        {
            Console.WriteLine("打开开关");
            devices.TurnOn();
        }
        public void TurnOff()
        {
            Console.WriteLine("关上开关");
            devices.TurnOff();
        }
    }
class Program
    {
        //调用
        static void Main(string[] args)
        {
            IDevices _switch = new Switch(new Light());
            _switch.TurnOn();
            _switch.TurnOff();

            Console.Read();
        }
    }

    建议

    1、抽象的稳定性决定了系统的稳定性,因为抽象是保持不变的,依赖于抽象是面向对象程序设计的精髓,也是依赖倒置的核心思想。

   2、依赖于抽象是一个通用的规则,而某些依赖于细节在所难免的,必须权衡抽象和具体的取舍,方法不是一成不变的。

   3、依赖于抽象就是要对接口编程,不要对实现编程。

    

    

    

     

时间: 2024-09-15 16:25:27

设计模式六大原则---依赖倒置原则(DIP)的相关文章

设计模式之禅之六大设计原则-依赖倒置原则

依赖倒置原则依赖倒置原则的原始定义是:● 高层模块不应该依赖低层模块,两者都应该依赖其抽象;● 抽象不应该依赖细节;● 细节应该依赖抽象. 那什么是抽象?什么又是细节呢?---->在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象.依赖倒置原则在Java语言中的表现就是: ● 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接

设计模式六大原则 依赖倒置原则

设计模式六大原则(3): 依赖倒置原则 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. 依赖倒置原则的核心思想是面向接口编程. 而面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变化时,上层也要跟着变化,这就会导致模块的复用性降低而且大大提高

深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解

 这篇文章主要介绍了深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解,本文讲解了DIP and JavaScript.何时依赖注入等内容,需要的朋友可以参考下     前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Inversion Principle ). 英文原文:http://freshbrewedcode.com/derekgreer/2012/01/2

详解Java设计模式编程中的依赖倒置原则_java

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一般是高层模块,负责复杂的业务逻辑:类B和类C是低层模块,负责基本的原子操作:假如修改类A,会给程序带来不必要的风险. 解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率.          依赖倒置原则基于这样一个事实:相

《Android 源码设计模式解析与实战》——第1章,第1.4节让项目拥有变化的能力——依赖倒置原则

1.4 让项目拥有变化的能力--依赖倒置原则依赖倒置原则英文全称是Dependence Inversion Principle,缩写是DIP.依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了.这个概念有点不好理解,这到底是什么意思呢? 依赖倒置原则有以下几个关键点: (1)高层模块不应该依赖低层模块,两者都应该依赖其抽象: (2)抽象不应该依赖细节: (3)细节应该依赖抽象. 在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被

设计模式六大原则(3):依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一般是高层模块,负责复杂的业务逻辑:类B和类C是低层模块,负责基本的原子操作:假如修改类A,会给程序带来不必要的风险. 解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率.          依赖倒置原则基于这样一个事实:相

对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解(转)

所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合,并由此引申出IoC.DI以及Ioc容器等概念.         面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本.   面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细

设计模式之--依赖倒置原则

1.什么是依赖倒转原则? 所谓依赖倒置原则,就是不论高层组件和低层组件都应该依赖于抽象,而不是具体实现类.听起来更像是"针对接口编程,而不是针对实现编程",但是这里依赖倒置原则更强调"抽象"的概念,不要让高层组件依赖低层组件,更不能依赖具体实现类,都要依赖于抽象.依赖倒置原则的核心在于"面向接口编程",目的在于"解耦". 2.这里的倒置是什么意思呢? 依赖倒置原则中的倒置是指我们的思想要和一般的"自顶向下"

设计模式六大原则--依赖倒转原则

       背景        前段时间有同学感觉自己电脑内存不够用了想买个内存条,只看她在网上捣鼓了一会就搞定了.也没见她看内存条的具体型号是否可以在其电脑上使用等等知识.一时不得其解,网上查了查才知道电脑的硬件是面向接口设计的,最近正好在学习设计模式,我想这是不是和设计模式中的依赖倒转原则有点关系.下面就让小生带领大家详细了解一下"依赖倒转原则(Dependence Inversion Principle)"吧.        定义        1.高层模块不应该依赖底层模块,