软件设计原则

一、软件设计原则概述

软件的可维护性和可复用性是两个非常重要的用于衡量软件质量的属性,所以在开发软件中,我们要为了提高软件系统的可维护性和可复用性,故我们要根据7条原则来开发程序,以便设计出软件系统,实现可维护性和复用的目标。

二、软件设计7条原则

  1. 单一职责原则
  2. 开闭原则
  3. 里氏代换原则
  4. 依赖倒转原则
  5. 接口隔离原则
  6. 合成复用原则
  7. 迪米特原则

三、软件设计原则详解

(一)、单一职责原则(Single Responsibility Principle,SRP)
1、定义
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。用于控制类的粒度大小,实现高内聚,低耦合的指导方针,它是最简单但又最难运用的原则。

(二)、开闭原则(Open-Closed Principle, OCP)
1、定义
软件实体应当对扩展开放,对修改关闭。 详细来说是指软件实体应尽量在不修改原有代码的情况下进行扩展。为了满足开闭原则,需要对系统进行抽象化设计,抽象化设计是开闭原则的关键。软件的易变细节可以由抽象派生的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展。

(三)、里氏代换原则(Lishov Substitution Principle, LSP)
1、定义
所有引用基类(父类)的地方必须能透明地使用其子类的对象。 大概就是子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
在运用里氏代换原则时应该将基类(父类)设计为抽象类或接口,让子类继承父类或实现父接口,并实现在父类中生命的方法,在运行时子类实例替代父类实例,可以方便地扩展系统的功能,无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。

(四)、依赖倒转原则(Dependence Inversion Principle, DIP)
1、定义
高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。 简单来说,依赖倒转原则要求针对接口编程,不要针对实现编程,降低客户与实现模块间的耦合。在实现依赖倒转原则需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中。
(补充知识点:依赖注入(Dependence Injection, DI)是指当一个对象要与其他对象发生依赖关系时采用抽象的形式来注入所依赖的对象,常见有三种方式:构造注入,设值注入,接口注入)

(五)、接口隔离原则(Interface Segregation Principle, ISP)
1、定义
客户端不应该依赖那些它不需要的接口。 一个类对另一个类的依赖应该建立在最小接口上。 使用该原则时要注意控制接口的粒度,接口不能太小,如果太小会导致系统的接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来不方便。一般来说,在接口中仅包含为某一类用户定制的方法,不应该强迫用户使用那些他们不用的方法。

(六)、合成复用原则(Composite Reuse Principle, CRP)
1、定义
优先使用对象组合(组合关系、聚合关系),而不是通过继承来达到复用的目的。 使用组合/聚合可降低类与雷之间的耦合度,一个类的变化对其他类造成的影响较低;其次才考虑继承,继承要严格遵守里氏代换原则,有利于降低对问题的复杂度。
继承复用虽然有简单和易实现的优点,但它也存在以下缺点:

  • 继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。
  • 子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。
  • 它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化。

(七)、迪米特原则(Law of Demeter, LoD)
1、定义
每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。 换句话说,这个原则就是要求软件实体应当尽可能少地与其他实体发生相互作用。这样可以降低系统的耦合度,使类与类之间保持松散的耦合关系。迪米特原则只与你的直接朋友相通信,对于一个对象,其朋友包括:

  • 当前对象本身
  • 以参数形式传入到当前对象方法中的对象
  • 当前对象的成员对象
  • 当前对象所创建的对象
  • 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友

心得:2021/9/11刚学习了java设计模式7种软件设计原则,通过参考黑马java设计模式和java设计模式(作者:刘伟)总结下来的一些概念性定义,等深入进一步学习再补充一些例子,因为没有例子比较难理解!!手码字码得好累!!如果文章有错误,请读者及时矫正我的错误,谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值