15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?.pdf
接口隔离原则是面向对象设计中的一个重要原则,它强调的是设计接口时应尽可能保持接口的专注性,避免让接口承担过多职责,从而减少不必要的耦合。这一原则的核心思想是:一个类不应该被迫依赖于它不需要的方法,即接口中的每个方法都应当对调用者有意义。 在上述例子中,作者提到了一个统一缓存服务的客户端SDK设计。在这个例子中,`Cache`类包含了两类方法:一类是缓存操作方法,如`get()`、`put()`和`delete()`,这些方法是面向调用者的,用于处理数据的存取;另一类是配置更新方法`reBuild()`,这是专为远程配置中心设计的,用于在运行时更新配置。如果`reBuild()`方法对所有调用者公开,可能会导致调用者误用,从而影响缓存服务的正常运作。 为了解决这个问题,可以应用接口隔离原则。将`Cache`类的方法拆分为两个不同的接口:一个包含缓存操作,另一个包含配置更新。例如,可以创建一个`CacheOperations`接口,只包含`get()`, `put()`, `delete()`等方法,供需要进行缓存操作的调用者使用;另一个`Configurable`接口,包含`reBuild()`方法,只对远程配置中心的本地代理开放。这样,调用者只能看到并使用它们真正需要的方法,避免了不必要的依赖和潜在的错误。 此外,作者还给出了一个`Modem`类的例子,`Modem`类最初包含了拨号`dial()`, 挂断`hangup()`, 发送`send()`, 接收`recv()`等方法。这些方法之间存在关联,但对不同类型的调用者来说,需要的方法不同。比如,网络游戏或浏览器只需要`send()`和`recv()`,而网络连接程序需要`dial()`和`hangup()`。通过接口隔离原则,可以将`Modem`类实现为两个接口:`DataChannel`(包含`send()`和`recv()`)和`Connection`(包含`dial()`和`hangup()`)。这样,应用程序可以根据需求选择依赖相应的接口,降低了耦合度,提高了系统的稳定性和可维护性。 另一个例子是`Door`和`TimedDoor`。原本的`Door`类有`lock()`, `unlock()`, `isDoorOpen()`方法,而`TimedDoor`需要增加定时功能。这里可以创建一个`Lockable`接口,包含`lock()`和`unlock()`方法;一个`OpenDetectable`接口,包含`isDoorOpen()`方法;以及一个`TimeSensitive`接口,包含定时相关的功能。`TimedDoor`类实现这三个接口,调用者可以根据需要选择依赖`Lockable`和`OpenDetectable`接口,而无需关心`TimeSensitive`接口,实现了接口的隔离。 接口隔离原则有助于提高代码的灵活性、可读性和可维护性。通过将接口细分为更小、更专注的部分,我们可以确保每个类只依赖于它真正需要的功能,从而降低系统复杂性,减少潜在的错误,并方便未来的扩展和修改。在实际开发中,我们应该始终关注接口的设计,确保它们满足接口隔离原则,以实现更高质量的软件设计。
剩余9页未读,继续阅读
- 粉丝: 2211
- 资源: 6175
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java的奖励养成类蓝牙联机游戏.zip
- 基于Java+Swing的石头剪刀布游戏.zip
- Java作战小游戏.zip学习资料程序大作业
- Easyx的小游戏,飞翔的小鸟
- Tetris GUI game based on Java language development(基于Java语言开发的俄罗斯方块GUI小游戏 ).zip
- html常规学习.zip资源资料用户手册
- Semester Examination Works. 烟台科技学院,智能工程学院,Java编程基础课设 Java打字游戏.zip
- PingFang SC、HK、TC(Win 完美协作-修改版).apk
- 64edf716dbff6a93a2ca0b5636e312da1722606914910.jpg.jpg
- mmexport1726895720568.jpg