| Robert C. Martin提出的面向对 象的5个原 则 , 这 次介 绍 一下单一 责 任原 则 。 单 一 责 任原 则 (Single Responsibility Principle (SRP)): 类 的 责 任只有一个,修改 类 的理由不能存在多个。 参考文档(http://www.objectmentor.com/resources/articles/srp.pdf ) |
| 遵循SRP单 一 责 任原 则 的 类满 足以下条件: |
| ◇ 只拥 有一个角色( 责 任) |
| ◇ 修改类 的 场 合,修改的理由只有一个 |
| 为 什么要去 类 的 责 任是 单 一的呢? |
| 假设 一个 类 有复数个 责 任, 类 修改的 时 候有2个以上的理由。其中某一个机能修改的 时 候很容易影响到其他机能。 软 件的安定性和 维护 便利性很会 较 差。 |
| SRP单 一 责 任原 则 中"修改的理由= 责 任" 这样 定 义 。即使理 论 明白但在 实 践中判断是比 较 困 难 的。 |
| 下面以打电话举 例 说 明: |
| Modem.java |
| interface Modem { |
| public void dial(String pno);//拨打 |
| public void hangup(); //挂电话 |
| public void send(char c); //送信 |
| public char recv(); //收信 |
| } |
| 这样定义的Modem接口 看起来是一组机能,实质上是两组机能。 |
| ◇ 连接管理 (dial、hangup) |
| ◇ 数据送受信(send、recv) |
| 为什么这边要分为两组机能呢? |
| 假设 Modem有以下修改: |
| ◇ 连接方法的修改 ⇒ Modem 类修改 |
| ◇ 送受信方法的修改 ⇒ Modem类修改 |
| 因此对应相对的变化,这边作为两组机能。 |
| 这样我们就可以重新定义如下 : |
| 连接管理接口: |
| Connection {dial, hangup} |
| 数据送受信接口: |
| DataChannel {send, recv} |
| 然后具体的实现 交 给继 承接口的各自的 类 去 实现 。 |
| 一般来说, SRP 单一责任原则类的设计可以通过以下步骤来实现: |
| ①寻找机能 :有什么 样的机能? |
| ②汇总机能(定义类) :相似的机能 归总到一个类 |
| ③考虑修改理由 :列 举类可能的修改理由 |
| ④分割类:如果类有多个修改理由的场合,把类分割成多个类。或者是多个类因只有一个修改理由而汇总成一个类。 |
面向对象:单一任务原则(SRP)
最新推荐文章于 2022-12-03 20:37:59 发布
本文介绍了Robert C. Martin提出的面向对象设计原则之一——单一责任原则(SRP),并详细解释了其含义及如何应用于类的设计中。通过电话调制解调器(Modem)的例子,展示了如何将一个复杂的类拆分成更小、职责更明确的类。
154

被折叠的 条评论
为什么被折叠?



