美文网首页
依赖倒置原则

依赖倒置原则

作者: 格物知其道 | 来源:发表于2021-05-31 09:41 被阅读0次
    • 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件的开发效率,节约软件开发成本和维护成本,我们将在下面的几节中依次来介绍者7条原则,本节介绍里依赖倒置原则

    依赖倒置原则的定义

    \color{#0000ff}{依赖倒置原则(Dependence Inversion Principle-DIP)}是Object Mentor 公司总裁罗伯特·马丁(Robert C·Martin)于1996年在C++ Report 上发表的文章。
    依赖倒置原则原定义:高层模块不应该依赖底层模块,两者应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High lebel modules shoulenot depend upon low level modules.Both should depend upon.Abstractions should not depend upon details. Details should depend upon adstractions).

    \color{#ff0000}{核心思想:面向接口编程不要面向实现编程,降低业务逻辑间的耦合度}

    \color{#ff0000}{依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。}

    软件设计中,细节往往多聚变化,而抽象层先对稳定,所以要以抽象层为基础搭建框架,抽象层一般会暴露接口或定义为抽象类,细节类实现/继承抽象层完成细节逻辑。

    接口和抽象类是指定规范和契约,不涉及具体业务,具体业务有细节实现类去完成。

    依赖倒置原则 作用

    1.降低类间的耦合性
    2.提高系统稳定性
    3.减少并行开发引起的风险
    4.提高代码的可读性和可维护性

    依赖倒置原则 实现方法

    1. 每个类尽量提供接口或抽象类,或者两者都具备
    2. 变量的声明类型尽量使接口/抽象类
    3. 任何类都不应该从具体类派生(从1.中派生)
    4. 使用继承时尽量遵循里氏替换原则

    【例】依赖倒置原则“顾客购物程序”应用
    分析:”顾客类“和“商店类”的关系。商店类中有sell()方法,顾客类通过此方法定义购物。

    //商店Xxx 有销售方法
    class Customer{
      public void shopping(XxxShop shop){
          //购物
          System.out.println(shop.sell());
      }
    }
    //商店Sss 也有销售方法
    class Customer{
      public void shopping(SssShop shop){
          //购物
          System.out.println(shop.sell());
      }
    }
    //可以定义一个Shop类 让Sss Xxx 继承或实现  就都具备shell 方法
    class Customer {
        public void shopping(Shop shop) {
            //购物
            System.out.println(shop.sell());
        }
    }
    
    shop.png

    实现代码

    package principle;
    public class DIPtest {
        public static void main(String[] args) {
            Customer wang = new Customer();
            System.out.println("顾客购买以下商品:");
            wang.shopping(new SssShop ());
            wang.shopping(new XxxShop ());
        }
    }
    //商店
    interface Shop {
        public String sell(); //卖
    }
    //韶关网店
    class SssShop implements Shop {
        public String sell() {
            return "Sss土特产:香菇、木耳……";
        }
    }
    //婺源网店
    class XxxShop implements Shop {
        public String sell() {
            return "Xxx土特产:绿茶、酒糟鱼……";
        }
    }
    //顾客
    class Customer {
        public void shopping(Shop shop) {
            //购物
            System.out.println(shop.sell());
        }
    }
    

    总结:依赖倒置原则的核心是:面向接口编程不要面向实现编程,在处理业务过程中,所尽可能了解所得业务信息,以便于抽象出属性和方法,便于依赖倒置原则的应用

    下一篇 上一篇

    原文

    相关文章

      网友评论

          本文标题:依赖倒置原则

          本文链接:https://www.haomeiwen.com/subject/qkgirltx.html