从Yegor256博客项目看集合元素删除的两种设计模式
在软件开发中,集合元素的删除操作存在两种常见的设计模式:链式调用和直接删除。Yegor256在其博客项目中的一次提交讨论展示了这两种模式的典型应用场景和设计考量。
两种删除模式解析
链式调用模式:books.get(id).remove()
这种模式首先通过get(id)方法定位到特定元素,然后调用该元素的remove()方法进行删除。其特点包括:
- 操作过程显式分为查找和删除两个步骤
- 符合面向对象的"点号"链式调用习惯
- 删除责任归属于元素对象本身
直接删除模式:books.remove(id)
这种模式由集合对象直接提供按ID删除的功能:
- 将查找和删除操作封装在一个方法调用中
- 删除逻辑集中在集合类内部
- 接口更为简洁直观
设计哲学比较
链式调用模式体现了"迪米特法则"(Law of Demeter),每个对象只与直接朋友交谈。而直接删除模式则更符合"最少知识原则",客户端不需要了解集合内部结构。
从性能角度看,直接删除模式通常更高效,因为它可以在一次操作中完成查找和删除,避免了中间对象的创建和多次方法调用。
实际应用建议
- 简单场景:当删除操作不需要额外业务逻辑时,直接删除模式更为合适
- 复杂场景:如果需要删除前后执行特定操作(如验证、日志等),链式调用提供了更好的扩展性
- API设计:公共API建议采用直接删除模式,内部实现可根据需要选择
Yegor256在博客项目中最终选择了直接删除模式,这反映了对API简洁性和性能的优先考虑。这种设计决策值得在类似的中小型项目架构中参考。
扩展思考
这两种模式的选择也反映了不同的设计哲学:链式调用更面向过程,直接删除更面向对象。在现代编程语言中,很多集合库同时提供两种方式,如Java的List既有remove(index)也有iterator().remove()。
理解这两种模式的本质区别,有助于开发者在设计自己的类库时做出更合理的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



