【代码坏味道】面对对象的泛滥者Object-Orientation Abusers

🧩 Switch 语句(Switch Statements)

🚨 什么是问题?

如果你写了很长的 switch-caseif-else 结构,很容易出问题。每加一种判断条件,就要改很多地方,难维护。

🤔 为什么不好?

  • switch 分支可能分散在很多文件或方法中,新加一种情况时,你得找遍这些地方修改,很麻烦。
  • 面向对象的写法应该尽量避免使用 switch,而是用“多态”来代替。

✅ 怎么办?

  • 提取方法 + 移动方法:先把 switch 部分独立成函数,然后放到更合适的类里。
  • 用子类或策略模式代替:如果 switch 是根据状态/类型来的,可以用不同子类或策略类代替。
  • 多态代替条件:用子类来表示不同情况,每个子类实现自己的行为。
  • 选项是 null? → 用“空对象”代替,避免加判断。

💰 有什么好处?

  • 结构更清晰,每种情况变成独立类,新增功能更容易。
  • 改 switch 变得少很多。

🧪 临时字段(Temporary Field)

🚨 什么是问题?

有些类里的变量,只在特定情况下有值,大多数时候是空的。这些就是“临时字段”。

🤔 为什么不好?

你看着对象有很多字段,但一运行,全是空的,搞不清楚它到底用来干嘛,很混乱。

✅ 怎么办?

  • 提取类:把这些只用于某些算法的字段,放到一个专门的类中去。
  • 引入空对象:用空对象代替“值为 null”的判断。

💰 有什么好处?

  • 类的结构更清晰,不会被一堆“空字段”搞混。
  • 更容易维护和阅读。

🚫 拒绝继承(Refused Bequest)

🚨 什么是问题?

你写了一个子类,它继承了父类,但只用了父类的一部分功能,很多继承的方法根本没用上,甚至要手动重写。

🤔 为什么不好?

继承就像父子关系,子类应该天然继承父类的特性。如果子类只想用父类一两个方法,那这个“关系”可能压根不合理。

✅ 怎么办?

  • 改用组合:不继承,而是把原来的父类作为普通成员使用。
  • 提取通用父类:如果两个类有一部分真的通用,可以提取到新父类中。

💰 有什么好处?

  • 你再也不用看到 Dog 居然继承了 Chair 这样的奇怪代码了 🐶🪑。
  • 结构清晰,职责明确。

🔁 替代类但接口不同(Alternative Classes with Different Interfaces)

🚨 什么是问题?

你发现两个类做的事一模一样,但方法名不一样。

🤔 为什么不好?

  • 多余的重复代码
  • 别人不知道该用哪个类、哪个方法,维护困难

✅ 怎么办?

  • 重命名方法:让它们的方法名统一。
  • 合并实现方式:让它们的参数、逻辑一样。
  • 提取公共父类:让这两个类都继承同一个父类,把共同功能写到这个父类中。
  • 如果功能完全一样,干脆删除其中一个类

💰 有什么好处?

  • 删除重复代码
  • 让程序员清楚该用哪个类,不再一头雾水

✅ 总结(白话版)

坏味道表现怎么办
Switch 语句写很多 case 分支用“子类”或“策略模式”代替
临时字段变量只偶尔才用拆到新类里,或用空对象
拒绝继承子类没用多少父类的东西改成组合关系,或重新设计父类
替代类接口不同功能一样,方法名不同统一方法名或合并为一个类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值