zoukankan      html  css  js  c++  java
  • 设计模式原则——依赖倒转&里氏代换原则

    设计模式一共有六大原则:

    单一原则、开放封闭原则、接口分离原则、里氏替换原则、最少知识原则、依赖倒置原则。

    这篇博客是自己对依赖倒转&里氏代换原则的一些拙见,有何不对欢迎大家指出。

    依赖倒转原则

    高层模块不应该依赖于低层模块,两者都应该依赖于抽象。

    抽象不应该依赖细节,细节应该依赖抽象。

    面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。「来源于:wiki」

    eg:

    问题由来:

    一个项目的数据库的链接,增删改查等会被复用,所以一般都会将其写成函数,这些函数被称为低层的函数。当我们调用这些函数的时候,高层次的代码就依赖于这些低层的函数。

    当我们再次做一个新的项目的时候,发现高层的逻辑都是一样的,仅仅是需要更换数据库的存储。这个时候,因为我们的高层模块依赖于低层的函数,是没办法复用这些模块的。

    现在去修改高层的代码会有很大的风险。

    解决方案:

    设置一个接口或者抽象类,让低层的函数实现其接口,高层的代码通过接口调用低层的函数。这样的如果更换低层函数,只需要让新的低层函数实现其接口,而对于高层的代码改的很少。大大降低了

    因为低层函数修改而给高层带来的影响。

    而为什么实现接口就不怕更改了那?这个就要涉及到另一个设计模式原则——里氏代换原则了。

    里氏代换原则

    派生类(子类)对象可以在程式中代替其基类(超类)对象。

    一个软件实体如果使用了父类的话,其一定可以适应其子类,它察觉不出父类与子类的差别。

    也就是说,在软件里面,把父类都替换成子类,其行为没有发生变化。

    实际应用:

    正式因为有了里氏代换原则,使继承复用成为了可能。

    只有当子类替换父类,软件单元不受影响的情况下,父类才能得到复用。而子类可以在父类的基础上增加新的行为。

    eg:

    猫是动物,动物拥有吃喝跑叫等行为。如果,我们需要狗,牛等动物拥有这些行为。让狗,牛等继承与动物。只需要更改创建的实例就好了。

    UML:(大话设计模式)

    总结:

    1,需求的变化只需要改变其实例化的对象。

    2,有了里氏代换原则才使开放封闭原则成为可能。

    (正是由于子类可以替换父类,才使父类再不修改的情况下就可以扩展)

  • 相关阅读:
    什么是shell
    shell种类
    centos7 安装JAVA (JDK 1.8) 并配置环境变量
    netcore liunx docker修改默认的Datetime format
    centos 7 安装 mysql 8.0.18
    centos 解决 mysql command not found
    centos 7 + Net Core 3.0 + Docker 配置说明(不含https)
    centos 7 安装golang1.13.5
    centos 7 安装git并配置ssh
    阿里云服务器 centos 7 安装postgresql 11
  • 原文地址:https://www.cnblogs.com/tujietg/p/10242657.html
Copyright © 2011-2022 走看看