You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何理解《代码整洁之道》G6规则:错误抽象层级的代码?附Stack接口示例

什么是正确的抽象层级

简单来说,高层抽象(比如接口、基类)只应该定义所有下层实现都通用、和具体实现逻辑完全无关的特性/能力,不能把只有某一类实现才有的专属逻辑放到高层抽象里。

你贴的Stack接口问题出在哪

这个接口的问题核心就是把只有固定容量栈才需要的能力,强塞给了所有栈的通用抽象:

  • 栈作为通用数据结构,核心能力只有pop(出栈)、push(入栈)、peek(查栈顶)、判空这几个,和容量相关的逻辑不是所有栈都需要的:比如用链表实现的无界栈根本不存在“占满”的情况,永远不可能触发FullException,也没法计算percentFull(总容量无限的情况下占比没有意义)。
  • 你把percentFull方法和FullException放到通用的Stack接口里,等于强制所有实现栈的类都要支持“固定容量”这个特性,无界栈的实现要么被迫写没用的空实现,要么直接抛异常,完全违背了接口做通用抽象的初衷。

更通俗的例子对照

你可以把抽象层级的规则类比成动物分类的定义:

你定义「动物」这个基类的时候,只能放所有动物都有的能力,比如进食()、移动()。要是你在「动物」基类里加了下蛋()方法,就完全错了——胎生动物(比如猫、狗)根本不会下蛋,你让这些子类怎么实现下蛋()?

这个错误和Stack接口里加percentFull是一模一样的逻辑:把只有部分子类才有的特性,放到了更高层的通用抽象里。

内容的提问来源于stack exchange,提问作者Jesus Mava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:36:02