我遇到过一个 Java 实用程序类,它有四种处理数据的方法。所有方法处理然后将参数写入同一个文件,每个方法接受四组不同的输入:
util::process(String data1)
util::process(String data1, Object1 data2)
util::process(String data1, String data3)
util::process(String data1, Object2 data4)
我看到了代码的味道,因为每次引入新的数据组合时,也会添加一个新的方法。方法重载感觉像是在掩盖设计或对象构造问题。
是否可以重构它并避免方法重载?怎么办?
这是一个有趣的问题,因为没有足够的细节来真正明确地说。我确实相信这段代码有异味,这是试图让程序看起来像面向对象编程的恶臭。有趣的是,该方法的名称为“process”,类型是字符串或名称之类的通用对象。正在做什么处理?我猜肯定不是 Controller 对象。在某些时候,您希望拥有具有职责的对象。因此,让我们假设其基础是应用程序的概念(例如,工作申请)。您可能希望将方法过程拉入该类型,然后使用继承通过引入不同的应用程序类型来增强功能。
另一种选择是引入责任链模式。我看到的问题是你似乎在说潜在链中只有 2 个链接。链式方法的优点是处理程序不必相互了解。
第三种选择是让后继者实现一个接口(interface)。这类似于命令模式,然后实际的“处理”实际上只是一个触发器,每个事物都对自己的行为负责。