【设计模式】——六原则

本文介绍了编程设计中的六大基本原则,包括单一职责原则、开放-封闭原则、依赖倒转原则、里氏代换原则、迪米特法则和合成/聚合复用原则。通过具体案例解释了这些原则的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        通过设计模式的整体介绍,我们同时认识了其中的六大原则,他们分别是:单一职责原则、开放-封闭原则、依赖倒转原则、里氏代换原则、迪米特法则和合成/聚合复用原则;下面分别对六大原则做一个简单的认识:


    单一职责原则

      解释:就一个类而言,应该仅有一个引起它变化的原因。

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

      以上这个说法太官方,理解起来费脑细胞,那我们说的直白些:就像我们平时的班级,如果一个人同时担任多个职务,如班长和团支书,作为班长被要求带领全班同学组织活动,而同一时间团支部又要求各班团支书开会,那面对这样的时间冲突,必定有一方的效率会受到影响,以至于影响任务的完成。所以对于这个问题,我们就要发现职责并把这些职责相互分离。



    开放-封闭原则

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

      开放-封闭原则是面向对象设计的核心所在。它有两个特征:‘对于扩展是开放的(Open for extension)’‘对于更改是封闭的(Closed for modification)’。在程序的设计过程中,无论模块是多么的‘封闭’,都会存在一些无法对之封闭的变化,然而我们就需要对这些很可能发生变化的种类做出预测,构造抽象来隔离这些变化。

      精神:面对需求,对程序的改动是通过新代码进行的,而不是更改现有的代码。例如:拿电脑来说,内存不够只要插槽足够就可以添加,硬盘不够可以使用移动硬盘等。。。

      如下图,如果我们想要添加开根运算,只需要对‘运算类’进行扩展,为无需改动客户端类,造成大麻烦:



    依赖倒转原则

      解释:抽象不应该依赖细节,细节应该依赖于抽象。

      依赖倒转原则又叫依赖倒置原则;说白了就是在编程时,要针对接口编程,不要对实现编程。我们都知道像电脑的主板、CPU、内存、硬盘等等这些都是针对接口设计的,而不是针对实现某些功能来设计的,这样一来,如果我们想要更换内存,就避免了要同时把电脑主板都更换的尴尬,他们都不相互依赖,也不会因为内存的损坏对其他部件造成影响。

      在依赖倒转原则中高层模块不应该依赖低层模块,两个都应该依赖抽象。




    里氏代换原则

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

      看白话翻译一番:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。同时还要注意,只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

      还是说课本上的例子吧,猫继承动物类,动物有吃、喝、跑、叫等行为,所以猫也同时具有,如果我们需要另一种动物,如狗也拥有类似的行为,由于狗同样继承于动物,所以我们只需要更改实例化的地方就可以了。避免了重复再去添加一类,造成代码重复。



    迪米特法则

      解释:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

      根本思想:强调类之间的松耦合。

      从之前一系列的程序学习我们深知耦合性的好坏,一个程序中类之间耦合过紧会使程序很难修改,可能会因为丝毫的变动波及到整个程序,所以在程序设计时,类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。



    合成/聚合复用原则

      解释:尽量使用合成/聚合,尽量不要使用类继承。

      合成/聚合复用原则所讲的内容在之前看UML的关系时已经很详细的讲解过,合成(Composition)和聚合(Aggregation)都是关联的特殊种类。聚合是一种弱‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成是一种强‘拥有’关系,体现了严格的部分整体关系,部分和整体的生命周期一样。

      举例说明:还是以动物界为例,鱼是海洋的组成部分,海洋包含了多种生物,并不是非有鱼不可,海洋和与是一种弱‘拥有’关系,这就是聚合;而鱼鳍是鱼生存必须有的一部分,而且他们的生命周期是相同的,所以鱼和鱼鳍是一种强‘拥有’关系,即合成。


      好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。



    总结:    

      六大原则就是这些,当然在编程过程中这几个原则是必不可少的,而每种原则在何时使用还要分别根据程序作出选择,有了这几大原则,可以使我们在编程过程和之后的维护都变得简单方便,避免了诸多难以预测的麻烦,无论是时间还是成本,都节省了一大部分。当然对此我还是不能熟练掌握的,在之后不断的实践中,还需要更多的体会理解,不断进步!





评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值