java - 避免过度使用方法重载

标签 java design-patterns refactoring overloading

<分区>

我遇到过一个 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)。这类似于命令模式,然后实际的“处理”实际上只是一个触发器,每个事物都对自己的行为负责。

关于java - 避免过度使用方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6163634/

相关文章:

java - Java 8 中原始特化的不一致

asp.net - 为什么在客户端请求之间打开数据库连接是一个坏主意?

java - 如何重构这个验证方法

python - 如何使用 Pandas 重构简单的数据帧解析代码

ruby - 将三种相似的方法变成一种方法

java - 带有 grails 的 Docx4j。将 HTML 转换为 Word 文档

java - Web 服务和 Log4J 输出到文件

java - Spring多个@Configuration类

java - 使用 OnClickListener() 是策略模式的示例吗?

php - 在 Zend 框架应用程序中记录设计模式