设计模式 | 接口隔离原则:打造灵活高效的代码架构

目录

一、什么是接口隔离原则

二、接口隔离原则的内涵

2.1 核心准则

2.2 设计要点

三、接口隔离原则的应用场景

3.1 大型接口拆分

3.2 客户端定制化

3.3 预防胖接口

四、接口隔离原则的实践案例

4.1 案例背景与问题

4.2 遵循原则的重构

五、接口隔离原则与其他设计原则的关系

5.1 与单一职责原则的区别

5.2 协同作用

六、总结与思考

6.1 回顾要点

6.2 重要性与价值

6.3 实践建议


一、什么是接口隔离原则

        接口隔离原则(Interface Segregation Principle,ISP),是面向对象编程中的重要设计原则之一 ,它的核心思想是:客户端不应该依赖那些它不需要的接口。简单来说,就是要把大而全的接口拆分成多个小而专的接口,让每个接口只负责一项单一的职责,从而降低类之间的耦合度,提高系统的灵活性、可维护性和可扩展性。

        比如,我们有一个 “动物行为” 接口,里面包含了 “飞”“跑”“游”“吃” 等各种行为方法。如果让所有动物类都去实现这个接口,像蛇类就会很尴尬,因为它并不会飞,但却不得不去实现 “飞” 这个方法,这显然不合理。按照接口隔离原则,我们就应该把这个大接口拆分成 “飞行接口”“奔跑接口”“游泳接口”“进食接口” 等多个小接口,让动物类根据自身实际情况去实现相应接口,这样代码结构就会更清晰合理。

二、接口隔离原则的内涵

2.1 核心准则

        接口隔离原则强调使用多个专门的接口,而非单一的总接口 ,以此避免客户端依赖那些它不需要的接口。用更加通俗的话来讲,就是要把大而全、功能混杂的接口,拆分成一个个功能单一、职责明确的小接口,让每个接口专注于做一件事。就像一个多功能工具,虽然看似强大,但如果把所有功能都集成在一个操作面板上,用户在使用时就会感到困惑,不知道该如何下手。而将这些功能拆分成多个独立的工具,每个工具只负责一项功能,用户就能更轻松地找到并使用自己需要的功能。

        在实际编程中,假设我们正在开发一个电商系统,其中有一个 “订单操作” 接口。如果这个接口既包含了创建订单、查询订单、修改订单等常规操作,又混入了一些与订单统计分析相关的方法,如获取订单总量、计算订单总金额等,就会导致接口变得臃肿复杂。对于那些只需要进行订单常规操作的客户端来说,这些统计分析方法就是不必要的负担,增加了他们使用接口的难度和复杂度 。按照接口隔离原则,我们应该将 “订单操作” 接口拆分成 “订单常规操作接口” 和 “订单统计分析接口”,这样不同的客户端就可以根据自己的实际需求,选择依赖相应的接口,从而使系统结构更加清晰,耦合度更低。

2.2 设计要点

在设计接口时,遵循接口隔离原则需要注意以下要点:

  • 接口细化:把大接口按照功能和职责拆分成多个小接口,每个小接口的功能更加单一、明确,这样可以提高接口的可维护性和可扩展性。例如,在一个图形绘制系统中,最初可能有一个 “图形操作” 大接口,包含绘制圆形、绘制矩形、绘制三角形以及计算图形面积等多种方法。但这样的接口不够细化,不同的客户端可能只需要其中部分功能。按照接口隔离原则,可以将其拆分为 “图形绘制接口”,里面包含绘制圆形、矩形、三角形等绘制相关方法;以及 “图形计算接口”,包含计算图形面积等计算相关方法。这样,只需要进行图形绘制的客户端,就可以只依赖 “图形绘制接口”,而无需关心图形计算的功能。

  • 方法尽量少:接口中的方法应尽可能精简,只保留必要的方法,避免出现过多冗余的方法。这并不是说方法越少越好,而是要保证每个方法都有其存在的价值和意义,并且与接口的职责紧密相关。例如,在一个用户管理接口中,如果包含了获取用户信息、修改用户密码等核心方法,同时又添加了一些与用户管理无关的方法,如发送邮件通知、生成随机验证码等,就会使接口变得混乱,增加使用者的理解和使用成本。

  • 建立最小依赖接口:确保类与类之间的依赖建立在最小的接口之上,让依赖关系更加精准、有效。比如,一个业务模块 A 依赖于另一个模块 B 提供的数据查询功能。如果模块 B 提供了一个大而全的数据操作接口,包含了查询、添加、修改、删除等多种功能,而模块 A 实际上只需要查询功能。这时,就应该为模块 A 建立一个只包含查询方法的最小依赖接口,模块 A 只依赖这个最小接口,而不是依赖模块 B 提供的整个大接口,从而降低模块 A 与模块 B 之间的耦合度。

三、接口隔离原则的应用场景

3.1 大型接口拆分

        在很多大型项目中,我们经常会遇到那种包含了大量方法、功能繁杂的大型接口。例如,在一个企业级的办公自动化系统中,可能有一个 “员工管理接口”,它里面不仅包含了员工信息的增删改查方法,还混杂着员工考勤记录查询、薪资计算、绩效考核相关等各种方法 。随着项目的不断发展和需求的变更,这个接口会变得越来越臃肿,维护起来也会越来越困难。一旦其中某个功能发生变化,可能会影响到整个接口,进而影响到所有依赖该接口的类,导致牵一发而动全身的局面。

        按照接口隔离原则,我们可以将这个庞大的 “员工管理接口” 拆分成多个小而专的接口。比如,“员工基本信息管理接口”,专门负责员工信息的增删改查;“员工考勤管理接口”,用于处理员工考勤记录的查询和统计;“员工薪资管理接口”,负责薪资计算和发放相关的操作;“员工绩效考核接口”,专注于绩效考核的评定和结果查询等。通过这样的拆分,每个接口的职责更加明确,功能更加单一,代码的可维护性和灵活性得到了极大的提高。当某个功能需要修改时,只需要关注对应的接口,而不会对其他接口和依赖它们的类造成影响。

3.2 客户端定制化

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值