架构师训练营第二章总结

用户头像
吴吴
关注
发布于: 2020 年 06 月 17 日

1 设计原则



1.1 开放——封闭原则(OCP)

定义软件实体(类、模块、函数等等)应该是可以扩展的,但是不可修改的。

1.1.1 遵循开放──封闭原则设计出的模块具有两个主要的特征

对于扩展开放模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。对于更改是封闭的对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本, 无论是可链接的库、DLL或者Java的.jar文件,都无需改动。

策略模式

适配器模式

观察者模式



1.2 依赖倒置原则(DIP)

定义

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

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

依赖倒置原则也被称为好莱坞原则:Dont't call me, I will call you. 即不要来调用我,我会调用你

解释请注意这里的倒置不仅仅是依赖关系的倒置,它也是接口所有权的倒置。当应用了DIP时,往往是客户拥有抽象接口, 而它们的服务者则从这些抽象接口派生。启发示规则──领事于抽象

  • 任何变量都不应该持有一个指向具体类的指针或者引用。

  • 任何类都不应该从具体类派生。

  • 任何方法都不应该覆写它的任何基类中的已经实现了的方法。

  • 如果一个具体类不太会改变,并且也不会创建其他类似的派生类,那么依赖于它并不会造成损害。

1.3 Liskov替换原则(LSP)

定义子类型必须能够替换掉它们的基类型。相对满足事实上,一个模型,如果孤立地看,里氏替换并不具有真正意义上的有效性,模型的有效性只能通过它的客户程序来表现。启发示方法

  1. 在派生类中存在退化函数并不总是表示违反了LSP,但是当这种情况存在时,

  2. 当在派生类中添加了其基类不会抛出的异常时,如果基类的使用者不期望这些异常,那么把它们添加到派生类的方法中应付导致不可替换性。 此时要遵循LSP,要么就必须改变使用者的期望,要么派生类就不应该抛出这些异常。

1.4 单一职责原则(SRP)

定义就一个类而言,应该仅有一个引起它变化的原因。什么是职责在SRP中,我们把职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。 有时,我们很难注意到这一点。我们习贯于以组的形式去考虑职责。



1.5 接口隔离原则(ISP)

定义不应该强制客户领事于它们不用的方法。如果强迫客户程序依赖于那些它们不使用的方法, 那么这些客户程序就面临着由于这些未使用方法的改变所带来的变更,这无意中导致了所有客户程序之间的耦合。



用户头像

吴吴

关注

还未添加个人签名 2018.03.02 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第二章总结