前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式六大原则---依赖倒置原则(DIP)

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

作者头像
令仔很忙
发布2018-09-14 15:28:33
8490
发布2018-09-14 15:28:33
举报
文章被收录于专栏:令仔很忙令仔很忙

定义

依赖倒置原则(Dependency Inversion Principle)

核心思想:依赖于抽象

具体体现:

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

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

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

实例

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

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

      3、电源插座。

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

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

代码语言:javascript
复制
/// <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();
        }
    }
代码语言:javascript
复制
class Program
    {
        //调用
        static void Main(string[] args)
        {
            IDevices _switch = new Switch(new Light());
            _switch.TurnOn();
            _switch.TurnOff();

            Console.Read();
        }
    }

建议

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年05月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 实例
  • 建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档