依赖倒置原则

  • 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件的开发效率,节约软件开发成本和维护成本,我们将在下面的几节中依次来介绍者7条原则,本节介绍里依赖倒置原则

依赖倒置原则的定义

是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}{依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。}

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

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

依赖倒置原则 作用

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());
    }
}

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

下一篇 上一篇

原文

你可能感兴趣的:(依赖倒置原则)