有效的java构建器习语在c++中等效吗?

2024-03-28

这是自从阅读《Effective Java》以来我一直在使用的一个很棒的习惯用法。我一直在尝试寻找 C++ 的等价物或类似的东西,但运气不佳。 GoF 书中找到的传统构建器模式并不真正适用于我的情况。这是一个复杂的对象,具有非常混乱的构造函数。下面是 Java 的一个小实现。

class ComplicatedObject {

    private String field1;
    private String field2;
    private int      field3;

    private ComplicatedObject(Builder builder) {

            this.field1 = builder.myField1;
            this.field2 = builder.myField2;
            this.field3 = builder.myField3;

    }

    public static class Builder {

            private String myField1 = "some default";
            private String myField2 = "some other default";
            private int           myField3 = -1;

            public Builder() { }
            public Builder field1(String val) {
                    this.myField1 = val;
                    return this;
            }
            public Builder field2(String val) {
                    this.myField2 = val;
                    return this;
            }
            public Builder field3(int val) {
                    this.myField3 = val;
                    return this;
            }
            public ComplicatedObject build() {
                    return new ComplicatedObject(this);
            }
    }
    public static void main(final String[] args) {
    //built like this

            ComplicatedObject obj = new ComplicatedObject.Builder().field1("blah").field2("lol").field3(4).build();

    }
}

它不仅可以适应 C++,而且习惯用法也已适应from C++.

我想我第一次听说这个习语是在 Java 出现之前。 IIRC Bjarne Stroustrup 在 C++ 第二版中提到了这一点,作为 C++ 不需要 Smalltalk 风格命名参数的解释。

我的日期可能有误,但这在 C++ 中已经有 15 年的历史了。

编辑:似乎它首先被描述于C++的设计和演变(6.5.1) 被调用的地方命名函数参数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效的java构建器习语在c++中等效吗? 的相关文章

  • .net 日历 - 使整个单元执行回发(可点击)

    我已经启动并运行了一个 net 日历 并从数据库中获取信息 默认情况下 天数会应用回发操作 我想做的是将该操作应用于整个单元格 这样用户就不需要仅单击文本链接 我是 dayRenderer 操作 我有以下行来尝试复制该操作 但第二个参数我不
  • 如何强制操作系统收回内存? (C++)

    在我的 C 代码中 我分配了大量内存来创建树 然后在每个节点中使用 删除 来释放内存 删除所有内容后 我检查操作系统使用的内存量 发现内存未释放 这是预期的 因为该进程不会立即将内存返回给操作系统 因为它仍然可能会再次使用它 问题是 我在删
  • 让子进程等待直到收到父进程的信号

    我想从父级创建 N 个子级 我希望所有的孩子同时开始 一个功能 测量时间 因此 我将该函数放入信号处理程序中 当父级完成创建 分叉 所有子级时 它会向所有子级发送信号 使用kill children id 以让 make 开始 代码如下 但
  • Spring 如何在登录网址上设置动态前缀

    我有一个始终以动态前缀开头的 Spring 应用程序 这是因为我需要该前缀来进行一些内部配置 问题是 当我尝试设置登录页面时 无法传递该前缀并使其工作 如何为我的登录页面设置动态前缀 这是我的 AppController 的一部分 我在其中
  • ASP.NET MVC:如何在返回状态代码 404 的同时提供内容? [复制]

    这个问题在这里已经有答案了 可能的重复 如何配置 IIS 以使用自定义内容提供 404 响应 https stackoverflow com questions 2551959 how to configure iis to serve m
  • 如何在 Mac 上的 Sublime Text 2 上运行 C++?

    我尝试在 Mac 上的 Sublime Text 2 上用 C 运行 hello world I typed include iostream int main cout lt lt Hello WOrld return 0 但这给了我一个
  • Mono 的 DNS 刷新超时

    虽然目前Mono项目的ServicePointManager类有DnsRefreshTimeout属性启用到其接口中 相关属性未实现 调用示例 ServicePointManager DnsRefreshTimeout 10 60 1000
  • IE 中“对象不支持属性或方法‘查找’”

  • 将谓词作为参数传递给Where 子句时,EF SQL 发生了变化

    EF 正在为下面列出的两个相似语句生成不同的 SQL var test dbcontext Persons GetAll Where c gt c PersonID 2 Select c gt c PersonName FirstOrDef
  • 如何结束用户会话并确保用户已注销?

    我是 aspx 的新手 现在的问题是 因为我正在做一个支持网络的项目 所以我从用户那里登录了 我拖放登录模板 然后使用 Session Authentication username Tostring 存储当前登录用户的信息等 现在我什至使
  • 在 Spring 中以编程方式解析 AliasFor 注释值

    我有一个注释 Target ElementType TYPE Retention RetentionPolicy RUNTIME public interface A Class value 这是在课堂上使用的 B D class publ
  • 让 clang-tidy 修复头文件

    我正在将当前使用 gcc 编译的项目移至 clang 并有一堆 gcc 没有生成的警告 Winconsistent missing override clang tidy致力于修复这些错误 cpp文件 但是它不触及hpp文件 因为在数据库中
  • Android 中的 RoboSpice 库是什么

    我正在尝试了解 android 中的 RoboSpice 库 我在这里看到了在线文档 https github com stephanenicolas robospice wiki Starter Guide 我尝试过什么 我之前研究过使用
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 如何在pdf中导出一对一的JTable[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 JTable 标题没有出现在图像中 https stackoverflow com questions 7369814 why does the jtable header not appea
  • Xamarin Mac 中 AttributeName 的用途

    我正在尝试对 Xamarin 中的 NSMutableAttributedString 中的子字符串进行着色 但它似乎缺少正确的常量 我应该在那里放什么 Update 这越来越接近 var s new NSMutableAttributed
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • Java邮件,设置回复地址不起作用

    我用java写了一个小的电子邮件发送程序 它有from to and reply to地址 当客户端尝试回复邮件时 应该能够回复reply to地址 目前它不起作用 我的代码如下 File Name SendEmail java impor
  • WPF 中的 InvokeRequired [重复]

    这个问题在这里已经有答案了 我在一个中使用了这个函数Windows forms应用 delegate void ParametrizedMethodInvoker5 int arg private void log left accs in

随机推荐

  • 切换菜单项的状态

    我正在开发一个 Eclipse RCP 应用程序 它有一些特定于视图的菜单 其中一个菜单项是我希望在启用相应功能时在旁边显示勾号的项目 同样 下次选择该项目时 该项目应取消勾选以反映相应的功能已禁用 我的问题是 如何设置这些菜单项的切换状态
  • 设置 Google 日历提醒 - 从 API v2 迁移到 API v3

    以前 我有以下可行的 Google Calendar API 2 谷歌日历 API v2 CalendarEventEntry calendarEventEntry new CalendarEventEntry calendarEventE
  • 根据另一个 numpy 数组中的值查找 numpy 数组的索引

    我想在更大的数组中找到索引 如果它们与不同的较小数组的值匹配 就像是new array below import numpy as np summed rows np random randint low 1 high 14 size 99
  • Mootools相当于jQuery的toggle()?

    我正在尝试使用 mootools 来完成单击时切换某些文本的快速任务 但我似乎找不到 Mootools 相当于 jQuery 的toggle 函数 我想做的如下 a id toggle function this set html new
  • 如何使用 Helix Toolkit 在 WPF 中导入 3D 模型?

    我正在尝试使用 Helix Toolkit 导入 3D 模型 我不知道该怎么做 是否有关于使用此工具包导入 3D 模型的在线指南 或者是否有除 Helix 之外的其他更简单的方法来导入 3D 模型 Regards 这是我的代码 using
  • Python 3.3:使用nose.tools.assert_equals时出现DeprecationWarning

    我正在使用nosetest工具来断言pythonunittest https docs python org 3 3 library unittest html from nose tools import assert equals as
  • 查找 img 在 jquery 中是否有 alt,如果没有,则从数组中添加

    首先需要找到网站中的所有img body find img 然后检查img是否具有 alt 属性 如果图像具有该属性 它将被转义 如果它没有或alt为空 将从列表或数组中随机添加一个字符串到img 我现在必须在函数中使用 each 但我对
  • 防止 UIScrollView 将内容移动到左上角

    我有一个UIImageView包含在一个UIScrollView 图像 通常 很大 因此用户可以将其缩小以查看整个图像 不过 缩小后 UIScrollView捕捉到ImageView到滚动视图的左上角 我希望用户可以定位它 但还没有找到 关
  • 为什么在 GaussianNB [scikit-learn] 中使用对数概率估计?

    我目前正在使用 scikit learn高斯NB http scikit learn org stable modules generated sklearn naive bayes GaussianNB html包裹 我注意到我可以选择几
  • 在 Doxygen 中引用参数的正确方法是什么?

    我有以下 Doxygen 函数文档 brief Does interesting things param in pfirst The first parameter a barrel full of monkeys pre pfirst
  • 从 Nim 中的 tar.gz 存档中读取文件

    寻找一种使用 Nim 编程语言 版本 0 11 2 从 tar gz 存档中读取文件的方法 说我有一个档案 my path to archive tar gz 以及该存档中的一个文件 my path to archive file txt
  • NamingException:jta.UserTransaction

    我有一个直接使用 Java Transaction API 资源的 hibernate 应用程序 我正在尝试使用 UserTransaction 来完成一些基本的数据库事务 UserTransaction 接口定义了允许 应用程序显式管理事
  • html输入范围拇指平滑移动

    我设置了一个 HTML 输入范围 对外观进行了一系列 CSS 更改 我想知道是否有任何方法可以使其从所在位置平滑地更改为用户更改的位置 input type range webkit appearance none width 100 he
  • 为什么通用列表的声明存在差异?

    我想声明两个列表 首先是一个整数列表 我将其声明为 List
  • Magento - 在控制器和块之间传递数据

    非常快速和简单的问题 但我找不到一个合适的答案 将数据从控制器传递到 Magento 中的块的最佳方法是什么 如果它有所不同 我将按如下方式加载布局 this gt loadLayout array default myModule def
  • 针对 JavaScript 中的多个正则表达式测试字符串

    我想针对 20 个左右的正则表达式测试给定的字符串 在 Javascript 中执行此操作的干净方法是什么 我更关心干净的代码和可读性而不是效率 但我也不希望它变得超级慢 现在我有 if href indexOf apple com gt
  • 如何更改四开中代码块的字体大小?

    我在用quarto准备 Beamer 演示文稿 我想减小给定块内代码的字体大小 以便一切都更合适 请参阅下面的示例 生成块的代码是 python Import packages import numpy as np python echo
  • 使滚动条出现在滚动条轨道悬停时

    我通过 CSS 使用自定义滚动条样式在 webkit 中实现自定义滚动条 如果其他浏览器已实现带前缀或不带前缀的版本 版本 请告诉我 但是 关于我的问题 有没有办法让滚动条出现在滚动条轨道的悬停上 有点像 Mac OS X Lion 和 M
  • ASP.Net MVC 将特定路由重定向到外部站点

    我有一个功能良好的 ASP Net MVC 站点 使用简单的标准路由方案 routes MapRoute Default controller action id new controller Home action Index id 我的
  • 有效的java构建器习语在c++中等效吗?

    这是自从阅读 Effective Java 以来我一直在使用的一个很棒的习惯用法 我一直在尝试寻找 C 的等价物或类似的东西 但运气不佳 GoF 书中找到的传统构建器模式并不真正适用于我的情况 这是一个复杂的对象 具有非常混乱的构造函数 下