gpt4 book ai didi

design-patterns - 使用值对象链接方法

转载 作者:行者123 更新时间:2023-12-04 23:10:27 24 4
gpt4 key购买 nike

在值对象上使用方法链接模式是否可以接受/良好做法(例如,返回一个新对象而不是这个)?是否有实现此解决方案的案例?

我想不出任何缺点,但我想听听你的观点。

最佳答案

结论:这种做法是完全可以接受的。

我相信这通常是当你有一个不可变对象(immutable对象)时发生的。不是改变原始对象,而是使用给定值创建一个新对象并返回。支持和反对使用方法链接执行此操作的论点与使用可变对象与不可变对象(immutable对象)大致相同。

我唯一担心的是,这对类的调用者来说很清楚 - 他们不能依赖与链接对象的身份相等性,并且必须明确调用不会改变原始对象。尽管如果他们实际上是在链接调用,他们就不会分配中间对象,因此不会有太大的风险。重要的是它们只使用方法链中的最后一个对象。

以 java.lang.String 为例,String 的一个客户端这样做:

myString.trim().replace("a", "b").substring(3, 9);

... 没有任何意义,通常表示程序员的误解。他们应该做的是:
String myNewString = myString.trim().replace("a", "b").substring(3, 9);

...然后使用 myNewString在后续的操作中。有趣的是,Java 的静态分析工具 Findbugs 可以检测到这种误解的实例,并将其报告为可能的错误。

客户理解是主要情况。其他缺点包括如果值对象的创建成本非常高,那么在每条链上创建一个新对象将会对性能造成影响。您应该能够从您自己的场景中判断这是否可能是一个问题。在这种情况下,您可能希望实现构建器模式,而不是在每个方法链上创建一个新对象。

除此之外,我想不出任何其他问题。

关于design-patterns - 使用值对象链接方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com