【设计模式】设计模式七大原则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzh66888/article/details/81155685

前言

最近在学习设计模式,学习设计模式我们需要了解设计模式的七大原则。设计模式的七大原则是用来干什么的呢?他是为支持面向对象软件系统的可维护性复用而诞生的。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。

设计模式七大原则

设计模式包含七大原则:开放-封闭原则、单一职责原则、依赖倒转原则、里氏替换原则、迪米特法则、jieg接口隔离原则、合成复用原则

不得不说,经典就是经典,这七大原则里面蕴含的思想已经深深把我折服,不光面向对象我们可以这样,我觉得生活中也不是不可以适当参照这些原则来办事。

开放-封闭原则

概念:软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。【ASD】

两个特征:对于扩展是开放的,对于更改是封闭的[ASD]

我们面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码[ASD]

面向对象设计的核心:开放-封闭原则

遵循这个原则可以使得程序可维护、可扩展、可复用、灵活性好。

然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。

我们要拒绝不成熟的抽象

举例:电脑的配件,如果内存不够了,我可以添加内存条(插槽足够),硬盘不够可以使用移动硬盘,电脑的扩展是有限的,所有扩展有限,如果软件系统设计的好,可以无限的扩张。

单一职责原则

概念:就一个类而言,应该仅有一个引起它变化的原因。或者是一个类只负责一个功能领域中的相应职责。

为什么?

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。

举例:照相机的职责就是照相,只要把这个职责做好,其他的不用管。相反,比如现在的手机,手机的作用是用来打电话用的,但是现在的手机可以上网,玩游戏,照相,摄影,功能很强大;但是上网,手机比不上电脑专业,照相摄影比不上照相机和摄像机,虽然手机发展有他的特点,当时在编程时,我们确实要再类的职责分离上多思考。

依赖倒转原则

概念:

抽象不应该依赖细节,细节应该依赖抽象。 就是追对接口编程,不是针对实现编程。

A.高层模块不应该依赖低层模块。两个都应该依赖抽象

B.抽象不应该依赖细节。细节应该依赖抽象

开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段

举例:还拿电脑来说,无论主板、内存、CPU、硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,那就会出现换内存需要把主板要换了的尴尬。

里氏替换原则

概念:子类型必须能够替换掉它们的父类型。

白话翻译:一个软件实体使用的是一个分类的话,那么一定适用于期子类,而且它觉察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成子类,程序的行为没有什么变化。

注意:只有当子类可以替换掉父类,软件单位的功能不受到影响时,分类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

举例:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能以此判断我喜欢动物,因为我不喜欢老鼠,虽然他也是动物。

迪米特法则

概念:一个软件实体应该尽可能少的与其他实体发生相互作用

前提:在类的结构设计上,每一个类都应当尽量降低成员的访问权限。

其根本思想强调了类之间的松耦合。类之间的耦合越弱,又有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

举例:你新入职一家公司,要去配置自己的电脑,你只需要联系IT部主管,让主管给你分配一个技术人员来给你配置就可以了,如果这个技术人员有事情离开,就在联系IT部给你换一个技术人员来接着配置。这其中,你不用认识这两个技术人员,只需联系IT部就可以。

接口隔离原则

概念:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

合成复用原则

概念:尽量使用对象组合,而不是继承来达到复用的目的。

为什么?

组合/聚合可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。

猜你喜欢

转载自blog.csdn.net/wzh66888/article/details/81155685