设计模式遵循的七大原则
发布日期:2021-09-30 18:11:08
浏览次数:4
分类:技术文章
本文共 2111 字,大约阅读时间需要 7 分钟。
1.开闭原则(Open Close Principle) 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是“开放-封闭原则”的精神所在。 简单的用一句经典的话来说:过去的事已成历史,是不可修改的,因为时光不可倒流,但现在或明天计划做什么,是可以自己决定(即扩展)的。 2.里氏代换原则(Liskov Substitution Principle) 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。 定义2:子类型必须能够替换掉它们的父类型。 里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义: 1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 2.子类中可以增加自己特有的方法。 3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。 4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。 3.依赖倒转原则(Dependence Inversion Principle) 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程 依赖倒置原则的中心思想是面向接口编程,传递依赖关系有三种方式,以上的说的是是接口传递,另外还有两种传递方式:构造方法传递和setter方法传递,相信用过Spring框架的,对依赖的传递方式一定不会陌生。 在实际编程中,我们一般需要做到如下3点: 低层模块尽量都要有抽象类或接口,或者两者都有。 变量的声明类型尽量是抽象类或接口。 使用继承时遵循里氏替换原则。 总之,依赖倒置原则就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。 4.接口隔离原则(Interface Segregation Principle) 采用接口隔离原则对接口进行约束时,要注意以下几点: 1. 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。 2. 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。 3. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。 运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。 5.组合/聚合复用原则 就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的 该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。 其实这里最终要的地方就是区分“has-a”和“is-a”的区别。相对于合成和聚合, 继承的缺点在于:父类的方法全部暴露给子类。父类如果发生变化,子类也得发生变化。聚合的复用的时候就对另外的类依赖的比较的少。。 合成/聚合复用 ① 优点: 新对象存取成分对象的唯一方法是通过成分对象的接口; 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的; 这种复用支持包装; 这种复用所需的依赖较少; 每一个新的类可以将焦点集中在一个任务上; 这种复用可以在运行时动态进行,新对象可以使用合成/聚合关系将新的责任委派到合适的对象。 ② 缺点: 通过这种方式复用建造的系统会有较多的对象需要管理。 继承复用 ① 优点: 新的实现较为容易,因为基类的大部分功能可以通过继承关系自动进入派生类; 修改或扩展继承而来的实现较为容易。 ② 缺点: 继承复用破坏包装,因为继承将基类的实现细节暴露给派生类,这种复用也称为白箱复用; 如果基类的实现发生改变,那么派生类的实现也不得不发生改变; 从基类继承而来的实现是静态的,不可能在运行时发生改变,不够灵活。 6.迪米特法则(Law Of Demeter) 迪米特法则其根本思想,是强调了类之间的松耦合,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成影响,也就是说,信息的隐藏促进了软件的复用。 一句话总结就是:一个对象应该对其他对象保持最少的了解。 7.单一职责原则(Single Responsibility Principle) 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责,应该仅有一个引起它变化的原因转载地址:https://blog.csdn.net/iteye_10343/article/details/82672498 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月08日 14时45分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MATLAB - 辨识工具箱的使用
2019-04-28
Eigen与MATLAB常用运算的对应关系
2019-04-28
线程与定时器的区别
2019-04-28
带宽大小及各频段对系统的影响
2019-04-28
MATLAB - plot的Tex字体设置
2019-04-28
力矩环PID调参要领
2019-04-28
pybotics工具箱中机器人模型的定义
2019-04-28
MATLAB - 数字信号包络线的求取
2019-04-28
产品可靠性测试 - 学习笔记(1)
2019-04-28
传感器的基本参数笔记
2019-04-28
vscode注释乱码的最简单解决方案
2019-04-28
MATLAB - Modbus TCP客户端的使用
2019-04-28
Power PMAC运动控制器 —— 学习笔记7
2019-04-28
Simulink框图转C代码笔记
2019-04-28
Word修改默认英文字体为Times New Roman
2019-04-28
Word页面底部有空白却自动换行的解决方案
2019-04-28
振动抑制浏览笔记
2019-04-28
MATLAB - 双y坐标绘图
2019-04-28
Matlab中legend的位置
2019-04-28
Eigen3矩阵与数组的互相转换
2019-04-28