《设计模式其实很简单》读书笔记——01

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35192584/article/details/54908370
1.单一职责原则
定义:对于一个类,应该只有一个引起它变化的原因。
理由:易于维护,高度可复用性是面向对象开发比较突出的特点。
违反原则
1.需要有足够简单的逻辑
2.需要类中方法数量足够少,才可在方法级别上违反
好处:
1.降低类的复杂程度,一个类只负责一项职责,其逻辑肯定比负责多项职责简单
2.提高类的可读性,提高系统可维护性。
2.里氏代换原则
定义:子类必须能够替换掉他们的父类型。
好处:
1.满足里氏代换原则后,子类可以代替父类出现,并不影响程序的新功能。
2.父类能得到真正的复用,并且子类可以在父类基础上添加新的基础行为。
3.正是里氏代换原则中子类型对于父类型的可替换性,在无需修改的条件下,就可以通过使用不同的子类得到扩展。
总结:
里氏代换原则是对实现抽象化的具体步骤规范。
3.开放封闭原则
定义:
程序的实体对象(模块,类函数等)应进行扩展不应该可以修改。
特征:
1.对扩展开放
2.对修改封闭
地位:
面向对象开发中所有设计原则的核心。
经验:
面向对象编程时,若要实现新功能,添加一个类往往比修改现有类更方便。
对软件设计目标的体现:
封装变化,降低耦合
好处:
不需要对原有系统进行修改的条件下,实现更灵活的系统扩展
意义:
1.开放封闭原则可以通过扩展已有的软件系统提供新的行为,以满足软件新需求,使变化中的软件有一定的 适应性 灵活性
2.对已有的软件模块,特别最重要的抽象模块不能再进行修改,这使变化中的软件系统有一定的 稳定性 延续性
4.依赖倒转原则
定义:
程序的高层模块不应该依赖于低层模块,但两者都应依赖于抽象。抽象不应依赖于具体细节,细节应依赖于抽象。(面向接口编程,而不是针对于实现编程)
规范:
1.每个类都尽量继承自接口或抽象类,或者接口抽象类两者都具备。
2.变量的显示类型尽量是接口或抽象类
3.类尽量避免从具体类派生。
4.尽量不要覆盖基类方法
特殊情况:
若一个类的功能在将来没有任何改变,就不需要使用依赖倒转原则。
意义:
1.传统过程性系统设计办法更倾向于高层模块依赖于低层模块,抽象层次依赖于具体的层次。倒转设计原则的意义就是把这个错误依赖关系倒转过来。
5.合成/聚合复用原则
定义:
尽量不要使用类的继承,而尽量使用合成/聚合。
实现复用的方法:
1.合成/聚合原则。
2.通过继承
好处:
1.有助于保持每个系统类都会被封装,而且类被集中在单个任务上。
2.类与类之间的继承层次保持比较小的规模,并且不太可能增长为不可控制的巨大单位。
何时用:
1.子类是父类的一个特殊种类,而不是父类的一个角色时
2.永远不会出现需将子类换成另一个类的子类的情况时。
3.子类具有扩展父类的责任,而不是重写父类方法时。
4.只有在分类学角度上有意义时,才可使用继承。
优点:
1.新对象存取子对象的唯一方法是通过子对象的接口
2.这种服用是黑箱复用,因为子类对象的内部细节是新对象看不见的。
3.这种复用更好的支持封装型的特性。
4.这种复用实现上的相互依赖性是比较小的。
5.每一个新的类都可以将焦点集中在一个任务上。
6.这种复用可以在运行时动态的进行,新的对象可以动态的引用与子类型相同的对象。
7.作为复用手段几乎可以应用到任何环境中去。
缺点:
系统中会有较多对象需要管理。
迪米特法则
定义:
如果两个类之间不必直接通信,则这两个类不应该发生直接相互作用。如果其中一个类需要调用另一个类的基本方法,可以通过第三方转发这个调用。
优点:
降低耦合,每个类尽量减少对其他类的依赖,因此很容易实现系统的功能模块相对独立,相互之间不存在或者很少有依赖关系。
缺点:
系统中存在大量中介类,这些类的存在完全是为了传递类之间相互协调的关系——这在一定程度上会增加系统的复杂程度。
耦合性
定义:
耦合性就是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度,调用模块的方式以及那些信息会通过接口。
接口的复杂性包括:
1.传递的信息数量,既有关的公共数据与调用的参数的数量。
2.联系的方式
3.传送信息的结构。
应用:
第三者转发表示就是两个对象之间,能不发生联系就不发生联系。
要求:
地米特法则要求类“害羞”一点,尽量不要对外公布太多的public方法以及非静态的public变量,尽量变得内敛一点,多使用private,protected等访问权限。

猜你喜欢

转载自blog.csdn.net/qq_35192584/article/details/54908370
今日推荐