面向对象编程五大原则SOLID-单一职责、开闭原则[亲测有效]

面向对象编程五大原则SOLID-单一职责、开闭原则[亲测有效]单一职责:SRP(The Single Responsibility Principle) 开闭原则: OCP(The Open Closed Principle)

参考引用:

  1. 架构整洁之道
  2. The Principles of OOD -UncleBob
  3. 软件设计之美-郑烨

单一职责:SRP(The Single Responsibility Principle)

OOD 面向对象:

最早定义: 任何一个软件模块都应该有且仅有一个被修改的原因。

最新定义:任何一个软件模块都应该只对某一类行为者负责。

Package 组件层面:

单一职责原则主要讨论的是函数和类之间的关系,在组件层面上,我们可以将其称为共同闭包原则(CCP)

单一职责的定义经历了一些变化。在《敏捷软件开发:原则、实践与模式》中其定义是,“一个模块应该有且仅有一个变化的原因”;而到了《架构整洁之道》中,其定义就变成了“一个模块应该对一类且仅对一类行为者(actor)负责”。

一个模块最理想的状态是不改变,其次是少改变

单一职责原则讲的并不是一个类只做一件事,它的关注点在于变化。单一职责本质上体现的还是分离关注点,所以,它与分离关注点的思考角度是一样的,需要我们将模块拆分成更小的粒度。

单一职责原则可以应用于不同的层次,小到一个函数,大到一个系统,我们都可以用它来衡量我们的设计。

相关设计模式

  1. 工厂方法模式
  2. 抽象工厂模式
  3. 生成器模

开闭原则: OCP(The Open Closed Principle)

OOD 面向对象:

设计良好的计算机软件应该易于扩展,同时抗拒修改。 软件实体(类、模块、函数)应该对扩展开放,对修改封闭。

在不修改原有代码的基础上,添加新的特性。

Package 组件层面:

OCP是系统架构设计的主导原则,其主要目的是让系统易于扩展,同时限制其每次被修改所影响的范围。实现方式是通过将系统分为一系列组件,并且将这些组件间的依赖关系按层次结构进行组织,使得高阶组件不会因低阶组件被修改而受到影响。

相关设计模式

  1. 工厂方法模式
  2. 抽象工厂模式
  3. 策略模式
  4. 状态模式

单一职责、开闭原则Demo反例

image.png

  • 单一职责:一个模块应该对一类且仅对一类行为者(actor)负责。可以看到当前这个对象服务了3类行为者(broze,gold,diamond)。
    • 需求发生变更,我们需要调整钻石玩家的攻击力,那我们需要修改GetDamage方法,diamond的变化修改,可能会导致broze、gold其他两个行为者也出现问题。
    • 另一个方面看,broze,gold,diamond三个行为者,任意一个发生变化,都会导致UserService.GetDamage方法不稳定,所以GetDamage方法违背的单一职责。
  • 开闭原则:在不修改原有代码的基础上,添加新的特性。
    • 出现了一个新段位:王者,我们就需要修改GetLevel、GetDamage的代码,这就可能会影响(broze,gold,diamond)的业务逻辑稳定性。

image.png

优化后

  1. 如果我们要调整钻石玩家攻击力为2.0, 我们只需要修改DiamondUser class,此时我们每个类都是职责单一的,某一个行为者的变化,并不会影响其他行为者。
  2. 如果新增一个王者段位,我们只需要创建一个KingUser,实现继承Iuser,这样我们即可实现,在不修改代码的情况下,增加了王者用户的新特性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13836.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注