大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说面向对象编程五大原则SOLID-单一职责、开闭原则[亲测有效],希望您对编程的造诣更进一步.
参考引用:
- 架构整洁之道
- The Principles of OOD -UncleBob
- 软件设计之美-郑烨
单一职责:SRP(The Single Responsibility Principle)
OOD 面向对象:
最早定义: 任何一个软件模块都应该有且仅有一个被修改的原因。
最新定义:任何一个软件模块都应该只对某一类行为者负责。
Package 组件层面:
单一职责原则主要讨论的是函数和类之间的关系,在组件层面上,我们可以将其称为共同闭包原则(CCP)
单一职责的定义经历了一些变化。在《敏捷软件开发:原则、实践与模式》中其定义是,“一个模块应该有且仅有一个变化的原因”;而到了《架构整洁之道》中,其定义就变成了“一个模块应该对一类且仅对一类行为者(actor)负责”。
一个模块最理想的状态是不改变,其次是少改变
单一职责原则讲的并不是一个类只做一件事,它的关注点在于变化。单一职责本质上体现的还是分离关注点,所以,它与分离关注点的思考角度是一样的,需要我们将模块拆分成更小的粒度。
单一职责原则可以应用于不同的层次,小到一个函数,大到一个系统,我们都可以用它来衡量我们的设计。
相关设计模式
- 工厂方法模式
- 抽象工厂模式
- 生成器模
开闭原则: OCP(The Open Closed Principle)
OOD 面向对象:
设计良好的计算机软件应该易于扩展,同时抗拒修改。 软件实体(类、模块、函数)应该对扩展开放,对修改封闭。
在不修改原有代码的基础上,添加新的特性。
Package 组件层面:
OCP是系统架构设计的主导原则,其主要目的是让系统易于扩展,同时限制其每次被修改所影响的范围。实现方式是通过将系统分为一系列组件,并且将这些组件间的依赖关系按层次结构进行组织,使得高阶组件不会因低阶组件被修改而受到影响。
相关设计模式
- 工厂方法模式
- 抽象工厂模式
- 策略模式
- 状态模式
单一职责、开闭原则Demo反例
- 单一职责:一个模块应该对一类且仅对一类行为者(actor)负责。可以看到当前这个对象服务了3类行为者(broze,gold,diamond)。
- 需求发生变更,我们需要调整钻石玩家的攻击力,那我们需要修改GetDamage方法,diamond的变化修改,可能会导致broze、gold其他两个行为者也出现问题。
- 另一个方面看,broze,gold,diamond三个行为者,任意一个发生变化,都会导致UserService.GetDamage方法不稳定,所以GetDamage方法违背的单一职责。
- 开闭原则:在不修改原有代码的基础上,添加新的特性。
- 出现了一个新段位:王者,我们就需要修改GetLevel、GetDamage的代码,这就可能会影响(broze,gold,diamond)的业务逻辑稳定性。
优化后
- 如果我们要调整钻石玩家攻击力为2.0, 我们只需要修改DiamondUser class,此时我们每个类都是职责单一的,某一个行为者的变化,并不会影响其他行为者。
- 如果新增一个王者段位,我们只需要创建一个KingUser,实现继承Iuser,这样我们即可实现,在不修改代码的情况下,增加了王者用户的新特性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13836.html