面向对象的五大基本原则

面向对象的五大基本原则

背景

早在本科课程里就了解过,我自己学习设计模式时,又另外学习过。
然而在过了几年的工作中,遇到一些问题时,我却把他们跑到了脑后。

下文摘录自CSDN

基本原则

单一职责原则: 一个类最好只做一件事

一个类应该专注于解决一个问题或实现一个功能,而不涉及其他无关的责任或功能。一个类应该有一个单一的关注点,只负责完成一个明确的任务。

目的是提高代码的可读性、可维护性和可扩展性。通过将不同的职责分离到不同的类中,可以使每个类的代码更加清晰、简洁和易于理解。
这样的设计使得类更加独立,可以更方便地进行修改、测试和重用。

降低系统的耦合性。当一个类只负责一个职责时,它与其他类之间的依赖关系更加清晰,类与类之间的耦合度降低。
这样的设计使得系统更加灵活和可靠,当需求变化时,只需要修改与该职责相关的类,而不会影响其他无关的类。

开放封闭原则: 对扩展开放、对修改封闭

设计软件实体时,应该通过扩展现有的实体来实现新功能,而不是修改已有的代码。
当需求发生变化时,应该通过新增代码来满足新需求,而不是直接修改已有的代码。

目的是提高代码的可维护性和可扩展性。通过遵循该原则,可以减少修改已有代码的风险,避免引入新的Bug,并降低对已有功能的影响。
同时,通过扩展现有的代码,可以实现新功能,而不会对已有的代码进行破坏性的修改。

常用的方法是使用抽象和接口来定义可扩展的行为,并将具体的实现留给子类或实现类来完成。
新增功能时,只需要实现新的子类或实现类,而不需要修改已有的抽象或接口。

降低系统的耦合性。通过将变化的部分和稳定的部分分离,可以使系统的各个组件更加独立,降低组件之间的依赖关系。
这样的设计更加灵活和可靠,当需求变化时,只需要新增新的组件,而不会影响已有的组件。

里氏替换原则: 子类必须能够替换其基类

子类对象应该能够替换掉父类对象,并且程序的行为不会发生变化。

要点:

  1. 子类必须完全实现父类的抽象方法
  2. 子类可以有自己的特殊行为:子类可以在实现父类的抽象方法时,增加自己的特殊行为,但不能修改父类的实现逻辑
  3. 子类的前置条件不能比父类更强
  4. 子类的后置条件不能比父类更弱
  5. 子类不能抛出比父类更多的异常

保证代码的可靠性和可扩展性。通过将子类对象替换父类对象,可以增加代码的灵活性和可复用性。
也有助于减少代码的耦合度,提高系统的可维护性和可测试性。

依赖倒置原则: 程序要依赖于抽象接口,而不是具体的实现

依赖关系应该通过接口或抽象类来建立,而不是通过具体的实现类。

要点:

  1. 高层模块定义抽象接口或抽象类,定义它所依赖的低层模块的行为
  2. 低层模块实现抽象接口或抽象类,提供具体实现
  3. 高层模块通过抽象接口或抽象类依赖低层模块

可实现高内聚、低耦合的代码设计。高层模块不依赖于具体的低层模块,而是依赖抽象接口或抽象类,提高代码的灵活性、可扩展性和可维护性。

接口隔离原则: 将庞大的接口拆分成更小的、更具体的接口

强调客户端不应该依赖它不需要的接口。简而言之,接口隔离原则要求将庞大的接口拆分成更小的、更具体的接口,以避免接口过于臃肿和不必要的依赖关系。

要点:

  1. 接口应该尽可能小
  2. 不应该依赖它不需要的接口
  3. 接口设计应该稳定

可实现高内聚、低耦合的代码设计。将庞大的接口拆分成更小、更具体的接口,可使接口设计更加精确、可控。
客户端只需要依赖必需接口,不受无关接口的干扰影响。接口设计稳定可以减少对接口的依赖,提高代码的可维护性和可扩展性

声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值