嵌入式开发环境构建_设计模式:不可变的嵌入式构建器

嵌入式开发环境构建

上周,我写了关于什么使图案成为反图案。 本周,我提出一种设计模式…或等待……也许这是一种反模式。 还是? 让我们看看!

当有一个类可以构建另一个实例时,构建器模式是一种编程风格。 构建器模式的最初目的是将对象的构建过程(在某些情况下可能非常复杂)与对象本身的类分开,因此构建器可以根据构建过程的进行方式交付不同类型的对象。 这是关注点分离的明确示例。

不可变的对象是创建的对象,在创建过程后不能更改。

建造者和不可变的对象自然而然地融合在一起。

构建器和构建的对象紧密相关,因此通常将它们放在同一程序包中。 但是为什么要在单独的类中实现它们? 一方面:它们当然必须是单独的类。 这就是全部。 但是另一方面:为什么构建器不能成为已构建类的内部类? Builder通常会以其自己的状态收集建筑物信息,并且在调用方请求构建对象时,此信息将用于构建已构建的对象。 大多数情况下,这种“使用”是复制操作。 如果生成器是内部类,则所有这些信息都可以存储在生成的对象中。 注意,内部类可以访问嵌入它的类的所有私有部分。 构建器可以创建尚未准备好的构建对象,并将构建信息存储在其中。 当要求建造所有东西时,便是最后的油画。

此模式后面是番石榴的不可变集合。 构建器是静态内部类。 如果查看ImmutableList的代码,您会发现抽象类内部有一个内部Builder类。

但这不是嵌入构建器和实现的唯一方法。 如果将实现嵌入到生成器中怎么办? 构建器是唯一需要对类进行可变访问的代码。 定义该类实现的查询方法的接口对于其他任何人都应该足够。 如果我们到了这一点,为什么不创建Matrjoschka?

让我们有一个接口。 让我们在接口内部将一个生成器作为一个内部类(默认情况下为静态和公共,不能以任何其他方式)。 让我们将构建器内部的实现作为实现外部接口的私有静态类。

public interface Knight {boolean saysNi();public class Builder {private Implementation implementation = new Implementation();public Builder setState(String say) {implementation.say = say;return this;}public Implementation build() {Implementation knight = implementation;implementation = null;return knight;}private static class Implementation implements Knight {private String say;public boolean saysNi() {return say.indexOf("ni") != -1;}}}
}

构建器可以访问Knight实施的任何字段,因为它们在同一顶级类中。 (JLS1.7,第6.6.1节,确定可访问性)

除了使用生成器之外,没有其他方法(讨厌的反射技巧或字节码滥用(目前已超出范围))可以访问实现。

该构建器可用于构建实现,一旦返回该实现,就无法再访问它,无法通过该构建器修改该实现。 如果实现是不可变的,则可以保证保存状态。

这是图案还是反图案?

参考: 设计模式:来自Java博客Jeep的JCG合作伙伴 Peter Verhas的不可变嵌入式构建器 。

翻译自: https://www.javacodegeeks.com/2014/02/design-pattern-immutable-embedded-builder.html

嵌入式开发环境构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】21秋期末考试财务管理10164k2

1、发放股票股利后,不会引起如下情形的有(   )。请在以下(1)-(4)中选出符合题意的全部选项:(1)改变股东的股权比例 ;(2)增加企业的资产&#xf…

python将html存为pdf_用Python将HTML转为PDF。

上期提到了如何获取公众号文章信息,这回就说下怎么将网页转为PDF,方便日常学习。html而后扩散一下以前一个比赛的结果(华章计算机抖音大赛)。数据库顺便谈谈本身对从此送书的一个想法。微信另外以前的送书活动,有中奖的读者没有联系我&#x…

SDH光端机和PDH光端机有什么区别?

通过之前的了解,我们都知道光端机有很多不同的分类,在这其中就有PDH光端机和SDH光端机,那么,PDH光端机和SDH光端机有什么区别?SDH光端机较PDH光端机相比有什么优势呢?接下来就由飞畅科技小编来为大家详细介…

【渝粤教育】国家开放大学2018年春季 0004-22T有机合成单元反应 参考试题

科目编号:0004 座位号: 2017-2018学年度第二学期期末考试 有机合成单元过程 2018年6月 一、选择题(每小题3分,共45分) 1.( )是可以再生的自然资源。 煤 B.农副产品 C.石油 D.天然气 下列有机化合物中的&a…

【渝粤教育】国家开放大学2018年春季 0034-22T现代管理原理 参考试题

科目编号:0034 现代管理原理 试题 2018年7月 单项选择:(每小题3分,共计30分) 1.下列各选项中,( )属于管理的对象。 A.组织资源和组织目标 B.组织资源和组织活动 C&…

使用Gradle – 2019版从Travis可靠发布到Maven Central

得益于在2018年和2019年末实现的显式登台存储库创建功能集,使您(自动)从Travis(不仅是)发布到Maven Central更加可靠。 背景 如果您仅想获取信息,如何使您的工件从Travis发布更可靠,请前进到另…

spring admin mysql_easyadmin: 简易的java后台管理框架,基于SpringBoot+FreeMark+ace admin+mysql...

easyadmin数据库一定要用utf8mb4编码,记得先执行manager.sql,再执行initdata.sql,其中tenant表不用管,这是我打算做的另外一个项目设计的表,因为直接复制的本项目,怕到时候忘记,所以没有删除拦截器相关文档…

【渝粤教育】国家开放大学2018年春季 0050-21T民族理论与民族政策 参考试题

科目编号:0050 座位号 2017-2018学年度第二学期期末考试 民族理论与民族政策 试题 2018年 7 月 一、单项选择题(在各题的备选答案中,只有1项是正确的,请将正确答案的序号,填写在题中的括号内。每小题2分,共…

SDI高清视频光端机特点有哪些?

SDI视频光端机设计和生产是适用于电视行业的高可靠、高性能的串行数字光传输设备,信号格式从19.4Mbps到1.485Gbps, 系统支持SMPTE292、SMPTE259M、SMPTE297M、SMPTE305M、SMPTE310M以及DVB-ASI(EN50083-9)等数字电视格式的信号,满足工业级产品的要求。那么&#xff…

【渝粤教育】国家开放大学2018年春季 0089-21TInternet和Intranet应用 参考试题

编号:0089 座位号: 17-18学年第1学期期末考试 Internet和Intranet应用试题 一、填空题:(每空4分,共40分) 1.Internet上各种网络和各种不同计算机间相互通信的基础是___________协议。 是WWW中…

SDI光端机是什么?SDI光端机产品介绍及监控方案!

SDI光端机就是光信号传输的中端设备。光纤价格的降低使它在各个领域得到很好的应用,因此各个光端机的厂家就好比是雨后春笋般发展起来。但是这里的厂家大部分技术并不是完全成熟,开发新技术需要耗资和人力、物力等,这就产生厂家多是中小企业&…

【渝粤教育】国家开放大学2018年春季 0105-21T酒店营销实务 参考试题

科目编号:0105 座位号 2017年度第二学期期末考试 酒店营销实务 试题 2018年7月 一、名词解释:(每题5分,共20分) 1.酒店的营销渠道: 产品生命周期: 市场营销: 酒店产品…

【渝粤教育】国家开放大学2018年春季 0177-21T电机学(二) 参考试题

编号:0177 a 2017-2018年度第二学期期末考试 电机学(2) 试 题 2018年 7 月 一、填空题(每空 4分 ,共40分)1.一台隐极三相同步发电机时空向量中+j轴与+A轴重合,某瞬间转子…

adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件

adf可以自定义溶剂吗在本文中,我将重点介绍ADF Faces Javascript API方法以从客户端触发自定义事件。 例如: function cliListener(actionEvent) {AdfCustomEvent.queue(actionEvent.getSource(), "servListener",null, true);}我们可以使用a…

【渝粤教育】国家开放大学2018年春季 0234-21T公务员制度讲座 参考试题

科目编号:0234 座位号 2017-2018学年度第二学期期末考试 公务员制度讲座 试题 2018年 7 月 一、名词解释(本大题共2小题,每小题10分,共计20分) 1.公务员考试录用 2.任职前公示制度 二、单选题…

VGA光端机技术原理及应用领域介绍

VGA光端机采用纯数字传输模式,能从根本上克服普通铜芯电缆传输系统在传输高频带信号时造成的拖尾、重影等现象,清晰的重现图象画面。VGA光端机传输的是光信号,没有电磁辐射,系统具有极高的保密性。同时VGA光端机把显示设备和信号源…

java getbytes 长度_JAVA中的getBytes()方法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样!String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如&…

【渝粤教育】国家开放大学2018年春季 0273-21T中国现代文学 参考试题

试卷编号:0273 座位号 2017——2018学年度第二学期期末考试 中国现代文学 试题 2018年7月 1.在文学革命中,_________提出的“八事”和陈独秀提出的“____________”,成为文学革命的主要内容。2.1921年10月出版的小说…

【渝粤教育】国家开放大学2018年春季 0341-21T高级英语听力(2) 参考试题

试卷代码:0341 2017-2018学年度第二学期期末考试 高级英语听力(2)试题 2018年7月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校(工作站)名称填写在答题纸规定栏内。 考试结束后,把试卷和答题纸放…