【发布时间】:2018-07-14 13:53:40
【问题描述】:
我正在考虑在 C++ 单元测试中使用构建器模式,以简化为正在测试的代码创建输入数据的过程。
在 Java 中,常见的习惯用法似乎是让构建器类的设置器返回(对)构建器对象本身的(引用),以便多个设置器可以链接在一行中。例如。 builder 类可以这样定义:
// class builder
public class Builder
{
private Part1 part1;
private Part2 part2;
public Builder withPart1(Part1 p1);
public Builder withPart2(Part2 p2);
};
然后这样使用:
Builder b;
Part1 p1;
Part2 p2;
b.withPart1(p1).withPart2(p2);
在 C++ 中可以通过让设置器返回对构建器对象的引用来实现相同的效果。但是,我无法在网上找到任何这样的例子。这种“链接”是 C++ 中的常见做法吗?如果没有,那为什么不呢?
【问题讨论】:
-
我认为我的问题更具体。您引用的问题似乎与一般使用 Builder 模式有关。我的是关于二传手的“链接”。但我确实得到了答案,所以谢谢!
-
因为它是一个反成语,所以应该避免使用 getter 和 setter,因为它们会破坏封装;构造函数应该用于构造对象。
-
@Gene: 构建器对象有效地允许构造的命名参数。
-
@Gene,构建器模式的全部意义在于更容易创建具有复杂构造函数和大量参数的类的对象。这几乎不是一个反成语。并且 getter 和 setter 应该用于建立一个合理的策略来访问特定类的成员,而不是简单地避免。但这是一个单独的主题。
-
@Gene 如果你有一个类
Rectangle,那么拥有像getWidth()或getHeight()这样的getter 是完全合理的。但是,您可能不会提供宽度和高度的设置器,而是提供stretch()和shrink()之类的函数。如果要显示您的矩形,它可能有一个数据成员color,它会有一个getter 和一个setter。这称为成员访问策略。有些数据成员是可读的,有些是可写的,有些是完全隐藏的。说“吸气剂是坏的”不是一个技术论点,而是一个宗教论点。
标签: c++ builder-pattern