软件理论
海凡
这个作者很懒,什么都没留下…
展开
-
依赖倒置DIP
依赖倒置原则的含义 高层模块不应该以来与底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 下图的结构 就违反了DIP原则,因为上层的client依赖于DB service,从而一来到DB 如果DB发生了变化,就需要修改DB service,从而修改client。 好的设计师中间这几层全部依赖于借口。 这样就算DB发生了变化也不会对DBserv原创 2013-01-06 20:17:28 · 253 阅读 · 0 评论 -
OCP开放闭合
软件应该是可以扩展的,但是不可以修改的。 对扩展都是开放的,模块式可以扩展来满足新的行为,我们可以改变模块的功能。 OCP的好处是,尽可能的减少修改模块的次数和范围,从而提高代码的可维护性,复用性。比如操作系统的升级补丁,在修复bug的情况下,肯定是越小越小。如果说OCP做的不好,每次修改需要修改大量的文件,那就会导致补丁很大。 对于修改是封闭的,在扩展模块的时候,不必改动源代码的二进原创 2013-01-06 20:17:23 · 303 阅读 · 0 评论 -
里氏替换
用一个子类来代替基类,程序的行为不变,那么就符合里氏替换。 最常见的违反里氏替换原则的例子:子类存在空的虚函数即一个子类对于基类的某些方法进行屏蔽将其改成空函数。也成为子类的退化。 里氏替换的意义在于更好的实现OCP。 如果我们的子类不能完全的代替基类,那么基类的抽象就是有问题的,必然会导致,在拓展子类功能的时候需要修改基类。 判断是否符合里氏替换的方法是判断两个类是否存在IS-A的原创 2013-01-06 20:17:25 · 294 阅读 · 0 评论 -
接口隔离ISP
不应该强迫客户依赖于它们不用的方法。 接口隔离可以让用户端仅仅关注行为,而不是实现这种行为的对象。 例如有一个功能:一个闹钟,当定时器超时的时候闹钟会响; 1 class Bell 2 { 3 void Ring() 4 { 5 6 } 7 } 8 9 class Tim原创 2013-01-06 20:17:30 · 287 阅读 · 0 评论 -
单一职责
首先什么是职责,在这里,职责就是变化的原因。 一个类应该仅有一个引起他变化的原因。 单一职责也称之为内聚性,内聚性的定义为一个模块组成元素之间的功能相关性。简单的说,单一职责就是说一个模块组成元素之间的相关性应该是很强的,或者说他们只有一种相关性。 1 class Rectangle 2 { 3 void Draw(); 4 doub原创 2013-01-06 20:17:20 · 272 阅读 · 0 评论