小菜学设计模式——依赖倒转原则

背景

本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习《大话设计模式》时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅。

真诚的希望自己能够从一名小菜成长为一名大鸟!

编写的程序应该满足:

1)可维护

2)可扩展

3)可复用

4)够灵活

废话少说,言归正传,设计模式原则之:依赖倒转原则

书面理解

依赖倒转原则:

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

B.抽象不应该依赖于具体,具体应该依赖于抽象。

简单的说就是要求对抽象进行编程,不要对实现(过程)进行编程,这样就降低了调用者(client)与实现者(operation)模块间的耦合。

抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。

面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。

面向对象的开发很好的解决了这个问题,一般情况下抽象(接口)的变化概率很小,让调用者依赖于抽象,实现的细节也依赖于抽稳定象。即使实现细节不断变动,只要抽象不变(接口),调用者就不需要变化。这大大降低了调用者与实现细节的耦合度。

个人的理解

依赖倒转原则:对于两个模块,如果二者之间存在耦合关系,那么尽量使用面向接口编程,即调用者只调用接口的方法,关于接口的具体是谁如何实现,调用者无需关心;实现者只关系接口的定义,关于谁要调用这个接口,实现者无需关心。那么这里高层次模块就是调用者,低层次模块就是是实现者,接口就是二者联系的桥梁。抽象不应该依赖于具体,然而具体实现者则要完全按照接口的定义去实现,否则,接口的定义将会失去意义。

关于面向过程编程,就好比如过去的C语言,他们是把所有需要的函数都实现在函数库里面,一旦某个模块需要使用的时候,带调用这个库里面的那个函数,看似程序毫无破绽,实际上他却限制了程序的扩展,因为一个函数只是告诉调用者我会完成某个功能,这个功能已经写死了,不能扩展了,除非你去修改那个函数的代码,明显违背了开发封闭原则。然而,面向对象编程则不是,调用者调用的是接口的方法,然而接口的具体实现用户是可以自定义的,只要按照接口的意思,可以写出各种不同的策略,那么就是面向接口编程。

现实中的例子,比如电脑模块之间的依赖使用,一块主板提供了各种接口(插孔),供CPU、内存条、硬、光驱等,如果A品牌内存条坏了,可以丢掉,买一个B品牌的内存条,继续插入主板使用,不会说内存条坏了,就必须连主板都要更换才能使用,因为主板依赖的是内存条插槽接口,内存条同样依赖这个插槽接口,所以内存条与主板是胡不影响的。

秦始皇统一车轴轮,也就是这个道理。

时间: 2024-10-16 18:52:01

小菜学设计模式——依赖倒转原则的相关文章

小菜学设计模式——里氏替换原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:里氏替换原则 书面理解 里氏替换原则:一个软件实体如果使用的是父类的话,那么一定适用与其子类,而且它察觉不出父类对象和子类对象的区别.也就是说,在软件里面,把

设计模式--依赖倒转原则

依赖倒转原则又称依赖倒置原则: 抽象不应该依赖细节,细节应该依赖于抽象.说白了,就是针对接口编程,不要针对实现编程. 依赖倒置原则包括三层含义: 1)高层模块不应该依赖低层模块,两者都应该依赖其抽象: 2)抽象不应该依赖细节; 3)细节应该依赖抽象. 看了上面的解释相信大家会和我一样会有一些疑问在脑海里,以下来具体说一说吧: 1)为什么要针对接口编程,而不是针对实现编程呢? 非常easy的一个样例.我们如今使用的电脑有各式的品牌.联想.神舟.戴尔等等, 电脑须要用到鼠标,键盘:如果鼠标.键盘是针

大话设计模式---依赖倒转原则

依赖倒转原则 高层模块不应该依赖低层模块.两个都应该依赖抽象. 抽象不应该依赖细节.细节应该依赖抽象. 里氏代换原则:子类型必须能够替换掉它们的父类型.

小菜学设计模式——合成复用原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:合成复用原则 书面理解 合成复用原则:要尽量使用合成/聚合,尽量不要使用继承. 对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类

小菜学设计模式——接口隔离原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:接口隔离原则 书面理解 接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口. 接口应该是内聚的,应该避免"胖"接口.一个类对另

小菜学设计模式——迪米特原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:迪米特原则(最少知识原则) 书面理解 迪米特原则:如果两个类不必彼此直接通信,那么这两个类就应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法

小菜学设计模式——开放封闭原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:开放封闭原则 书面理解 开放封闭原则:软件实体(类.模块.函数等等)应该可以扩展,但是不可以修改 对于扩展是开放的,对于修改则是关闭的 无论模块是多么的封闭,

小菜学设计模式——单一职责原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:单一职责 书面理解 单一职责:就一个类而言,应该仅有一个引起它变化的原因 如果一个类承担职责过多,接等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制

学习大话设计模式05_依赖倒转原则

依赖到转原则 A.高层模块不应该依赖低层模块.两个都应该依赖抽象. B.抽象不应该依赖细节.细节应该依赖抽象.即:针对接口编程,不要对实现编程. 里氏代换原则: 一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别.也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化. (子类型必须能够替换掉它们的父类型) 只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基本上增加新的行为. 由于子类型的可替换