zoukankan      html  css  js  c++  java
  • 依赖倒置原则

    依赖倒置原则

    定义

    1. 高层模块不应该依赖低层模块,二者都应该依赖其抽象(接口)
    2. 抽象(接口)不应该依赖细节;
    3. 细节应该依赖抽象

    解释:

    抽象:即抽象类或接口,两者是不能够实例化的。

    细节:即具体的实现类,实现接口或者继承抽象类所产生的类,两者可以通过关键字new直接被实例化。

     本质:面向实现编程与面向接口编程之争。

    请看一个面向实现的案例:

    jack正在吃苹果的例子

    如果jack要吃其他的食物就要修改代码,不符合开闭原则。

    将上述的例子重构:

    思考:在大型项目中采用哪种更符合开发的要求。

    答案不言而喻。

    依赖倒置原则的核心就是面向接口编程的思想。

    相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。

    依赖很好理解,是类与类之间的关系的一种,什么是倒置,在面向现实编程的时候,Jack吃苹果,我们就写一个Jack类,一个apple类就好,Jack去吃好了,倒置的意思就是提取公共的抽象,面向接口(抽象类)编程。不再依赖于具体实现了,而是依赖于接口或抽象类,我先写一个people的接口,(今天是Jack,明天可能就是小明)一个Food接口,然后去实现,这样我们的思维方式也发生了“倒置”了。

    依赖的三种实现方式(对象的依赖关系有三种方式来传递)

    接口方法中声明依赖对象。(上边的案例使用的此方法)

    构造方法传递依赖对象。在构造函数中的需要传递的参数是抽象类或接口的方式实现。(如下种方式)

     

    Setter方法传递依赖对象。在我们设置的set方法中的参数为抽象类或接口,来实现传递依赖对象。

     

    使用依赖倒置原则

    优点:

    减少类之间的耦合

    提高系统的稳定性

    提高系统的可维护性和可扩展性

    缺点:

    导致有更多的类和接口来维护

    依赖反转原则不应该盲目使用在模块中。比如一些功能类之类的,则不需要使用这个原则。

    最佳实践:

    每个类尽量有借口或者抽象类

    变量的类型尽量声明为借口或者抽象类

    尽量不要复写父类的方法

    结合里氏替换原则来使用

    依赖倒置原则的核心是面向接口编程的思想,尽量对每个实现类都提取抽象和公共接口形成接口或抽象类,依赖于抽象而不要依赖于具体实现。

    依赖倒置原则的本质其实就是通过抽象(抽象类或接口)使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。

  • 相关阅读:
    LeetCode 345. Reverse Vowels of a String 题解
    LeetCode 344. Reverse String 题解
    LeetCode 27. Remove Element 题解
    LeetCode 61. Rotate List 题解
    LeetCode 19.Remove Nth Node From End of List 题解
    Android耗电量
    Android 使用adb查看和修改电池信息
    Android AOP AspectJ 插桩
    Flask相关用法
    Monkey日志信息的11种Event percentage
  • 原文地址:https://www.cnblogs.com/jikjk/p/10507554.html
Copyright © 2011-2022 走看看