面向对象改造的核心是识别职责、划分边界、封装变化,即将数据与操作绑定,提炼Order等核心类,封装字段与行为,用多态替代if-else,以组合代替过度继承。

把面向过程的 Java 代码改造成面向对象风格,核心不是“加个 class 就完事”,而是重新识别职责、划分边界、封装变化。关键在于:把数据和操作数据的逻辑绑定在一起,让每个类有清晰的身份和责任。
识别“名词”和“动词”,提炼出核心类
面向过程代码通常围绕函数展开,比如一堆 calculateTax()、printInvoice()、validateOrder()。先通读逻辑,找出反复出现的实体名词(如 Order、Customer、Product、Invoice),再看哪些操作天然属于它——比如“计算订单总金额”明显是 Order 的事,而不是一个独立函数。
- 把分散在各处的字段(如
orderId、items、discountRate)收进Order类,作为私有属性 - 把相关行为(如
getTotal()、addItem()、applyDiscount())作为该类的方法 - 避免“工具类”泛滥;像
TaxCalculator.calculate(order)可以变成order.calculateTax(),前提是税规则与订单强相关
用封装隐藏实现细节,暴露有意义的行为接口
面向过程常直接操作数据结构(如遍历 List<Map<String, Object>>),这导致逻辑散乱且易错。重构时要把“怎么算”藏起来,只告诉调用方“能做什么”。
- 把原始集合包装成领域对象:
new Order(items)构造时就校验非空、去重、设置默认状态 - 方法命名体现意图而非步骤:
order.confirm()内部可能更新状态、发通知、扣库存,但外部不关心 - 敏感字段设为
private,提供受控访问:比如order.getStatus()可返回枚举,而不是直接暴露statusString
用多态替代条件分支,让变化可插拔
面向过程里常见大段 if-else 或 switch 判断类型再执行不同逻辑(如按支付方式走不同流程)。这是重构重点——把分支逻辑下沉到子类或策略中。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 定义统一接口:
interface PaymentProcessor { void process(Payment payment); } - 拆出具体实现:
AlipayProcessor、WechatProcessor、CreditCardProcessor - 创建时注入或工厂获取:
PaymentProcessor processor = processorFactory.get(payment.getMethod()),主流程不再写if (method == ALIPAY) {...}
用组合表达“拥有关系”,避免过度继承
别一上来就建 BaseService 和 AbstractOrderHandler。优先问:“这个类是不是真的‘是一种’另一个类?还是它只是‘用到了’别的类?”
- 订单有地址 →
Order持有Address实例(组合),而不是让Order extends Address - 订单需要发消息 → 注入
NotificationService,而不是继承它 - 继承只用于真正符合“is-a”且需复用大量共性行为的场景(如
AdminUser和RegularUser都是User)
重构不是一步到位,建议从最频繁修改、最易出错或业务含义最明确的一个模块开始,比如先把“下单”流程独立成 OrderService 和 Order 类,跑通单元测试,再逐步扩展。不复杂但容易忽略。

















