设计模式-面向对象设计原则

本文深入探讨了面向对象设计的六大核心原则:单一职责、开闭、里氏代换、依赖倒转、接口隔离及合成复用原则,解析如何通过这些原则提升代码质量,实现高内聚低耦合的设计。

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

面向对象设计原则

QnGkdA.md.png

单一职责原则 :一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小,而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作。类的职责主要包括两个方面:数据职责和行为职责,数据职责通过其属性来体现,而行为职责通过其方法来体现。 单一职责原则是实现高内聚、低耦合的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。

Qfx8KS.png

QfxQ8P.md.png

开闭原则抽象化是开闭原则的关键。开闭原则还可以通过一个更加具体的“对可变性封 装原则”来描述,对可变性封装原则(Principle of Encapsulation of Variation, EVP)要求找到系统的可变因素并将其封装起来。

QfxVDe.md.png

QfxpNR.md.png

里氏代换原则里氏代换原则可以通俗表述为:在软件中如果能够使用基类对象,那么一定能够使用其子类对象。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话, 那么它不一定能够使用基类。 里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

Qfv57j.md.png

1576416279276

依赖倒转原则简单来说,依赖倒转原则就是指:代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程, 而不是针对具体类编程。 实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话, 那么依赖倒转原则就是面向对象设计的主要手段。

QfvdXD.md.png

QfvU1K.md.png

接口隔离原则接口隔离原则是指使用多个专门的接口,而不使用单一的总接口。每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。 (1) 一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做“角色隔离原则”。 (2) 接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独 的接口,而不要提供大的总接口。

Qfvef0.md.png

QfvMXF.md.png

合成复用原则合成复用原则就是指在一个新的对象里通过关联关系 (包括组合关系和聚合关系)来使用一些已有的对象, 使之成为新对象的一部分;新对象通过委派调用已有 对象的方法达到复用其已有功能的目的。简言之:要尽量使用组合/聚合关系,少用继承。

QfvFmQ.md.png

QfvATs.md.png

迪米特法则在狭义的迪米特法则中, 如果两个类之间不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 狭义的迪米特法则可以降低类之间的耦合,但是会在系统中增加大量的小方法并散落在系统的各个角落,它可以使一个系统的局部设计简化, 因为每一个局部都不会和远距离的对象有直接的关联,但是也会造成系统的不同模块之间的通信效率降低,使得系统的不同模块之间不容易协 调。广义的迪米特法则:指对对象之间的信息流量、流向以及信息的影响的 控制,主要是对信息隐藏的控制。信息的隐藏可以使各个子系统之间脱 耦,从而允许它们独立地被开发、优化、使用和修改,同时可以促进软件的复用,由于每一个模块都不依赖于其他模块而存在,因此每一个模 块都可以独立地在其他的地方使用。一个系统的规模越大,信息的隐藏就越重要,而信息隐藏的重要性也就越明显。

QfjXTA.md.png

QfjxYt.md.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值