设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP

一、DIP简介(DIP--Dependency Inversion Principle):

1、高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 2、抽象不应该依赖于细节,细节应该依赖于抽象。

高层模块包含了一个应该程序中的重要的策略选择和业务模型,正是这些高层模块才使得其所有的应用程序区别于其他,如果高层依赖于低层,那么对低层模块的改动就会直接影响到高层模块,从而迫使它们依次做出改动。

二、举例说明:

反面例子:

缺点:耦合太紧密,Light发生变化将影响ToggleSwitch。

解决办法一: 将Light作成Abstract,然后具体类继承自Light。

优点:ToggleSwitch依赖于抽象类Light,具有更高的稳定性,而BulbLight与TubeLight继承自Light,可以根据"开放-封闭"原则进行扩展。只要Light不发生变化,BulbLight与TubeLight的变化就不会波及ToggleSwitch。

缺点:如果用ToggleSwitch控制一台电视就很困难了。总不能让TV继承自Light吧。

解决方法二:

优点:更为通用、更为稳定。

三、DIP优点:

使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。

四、启发式规则:

1、任何变量都不应该持有一个指向具体类的指针或者引用 2、任何类都不应该从具体类派生(始于抽象,来自具体) 3、任何方法都不应该覆写它的任何基类中的已经实现了的方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

【生信菜鸟经】如何系统入门R语言

写在前面 R语言不仅在生物信息数据处理中发挥着重要作用,也是其它主流数据处理人士的首选工具。现在非常多自学生物信息学的小伙伴必须学的就是R,所以写一个R的系统性...

4629
来自专栏大数据挖掘DT机器学习

[笔记]使用Python一步一步地来进行数据分析

原文 http://www.cnblogs.com/nxld/p/6058998.html 你已经决定来学习Python,但是你之前没有编程经验。因此,你常常...

6036
来自专栏C语言小白到大神

最美的C语言程序流体,你会做吗?

想好好学C语言,尽量不要单一的只是看书(尤指谭浩强老师的,这是来自众多社群小伙伴的建议),多动手才是王道。

560
来自专栏编程

【数据结构】Java版

有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 ? 你是程序猿对吗?会写代码的那种? 我是打字猿?会打代码的那种? ? ...

1665
来自专栏数据小魔方

R语言数据清洗实战——世界濒危遗产地数据爬取案例

最近重复新翻阅R语言领域唯一一本关于网络数据采集的参考书——《基于R语言的自动数据收集》,开篇就是一个数据爬取的案例。 尽管之前已经粗略的看过一遍,但是仍感书中...

3876
来自专栏韩伟的专栏

为何我们的代码难以阅读

任何程序员都能写出机器可以阅读的代码,但只有好的程序员才能写出人可以阅读的代码。这句话道出了要写出容易阅读的代码的困难。但是这些困难到底是什么,我们应该如何认识...

3605
来自专栏人工智能LeadAI

数据清洗经验

平时习惯了在某些特定的数据集合上做实验,简单的tokenization、预处理等步骤就足够了。但是在数据越来越大的年代,数据清洗越来越重要,也越来越复杂。看到P...

2934
来自专栏顶级程序员

为什么Python是入行人工智能的首选语言?

在所有编程语言里,Python并不算萌新,从1991年发布第一个版本,至今已经快30年了。

874
来自专栏趣学算法

数据结构学习秘籍

网络上太多的同学吐槽被虐,如滔滔江水连绵不绝,数据结构太难了!真的很难吗?其实数据结构只是讲了三种:线性结构、树、图。到底难在哪里呢?通过调查了解大概有四个原因...

642
来自专栏深度学习自然语言处理

matplotlib--python的数据可视化二

702

扫描关注云+社区