java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生

PS:今天的23中设计模式中的创建者方式,至此告一段落。我今天带来的技术分享为创建者模式以及原型模式。当然在Java中这两种方式很常见,只不过我们写的次数确实有点低而已,但是这不是我不学它的借口!!!

创建者模式

无构建者模式代码示例:需求创建一个摩托车对象 并且使其开始运行。

发动机代码构建:

97a155fcd79a88ad2beae4db2c10b657.png

发动机代码构键

车架代码实例:

647ca39debf0671698646071343d8e10.png

车架代码实例

轮胎机代码示例:

ad37ef2b2a28d38d1c829ab46410a939.png

轮胎机代码示

摩托车对象实体类:

045144d100017c199484017d07683468.png

摩托车对象实体类

测试类:

49eff235e01929002fdd01e05f563fc9.png

测试类

总结:摩托车对象时一个大对象:构建过程中可能需要很多其他对象的使用,比如:车架、发动机、轮胎 所以如果每次摩托车对象的创建,都需要其他对象 并且调用者都需要知道摩托车的具体细节,这样对于调 用者来说是很痛苦的。所以在这个基础之上,我们希望 是否可以将调用者和创建者进行解耦。

作用:

当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config、VO、PO、Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。

常见的使用场景:构建比较复杂的产品。

StringBuilder DomBuilder SaxBuilder

Sql中的PreparedStatement

构建者类图总结

80d0a282dcce6f5b65a1a990f8bc5308.png

类图总结

总结:以上,调用者无需知道具体的构建者中的具体构建顺序,调用者专注于自己的业务即可。实现了解耦。但是这里最重要的就是构建顺序,不同的builder’可以构建不同的实例对象

案例测试:需求构建一个对应品牌的手机对象。调用者无需知道具体的对象的调用细则。

手机实体类构建代码:

0586e8a0bf152e0e95cd964916ac5712.png

实体手机类

构建者接口以及对应实现 :

758d21954a1a78e68810ec4072b5e8dd.png

构建者接口以及对应实现

装配接口以及对应实现:

2075ab17d7c43432e6ed1ea8da1f6dc5.png

装配接口以及对应实现

测试类:

437908b6bc3b6036c05880d89a170e20.png

测试类

总结:以及需工厂的区别

a、将一个对象底层的依赖 全部交由builder执行,具体的建造顺序,由builder指定。然后由director负责完成装配过程。调用者无需知道底层的具体顺序以及装配过程。如果不满足需要则直接重新创建builder,完成具体的建造顺序

b、建造者模式关注与对象创建的具体过程,而工厂则关注于最后创建对象的结果。

c、如果构建出来的对象差异较大,需要多个构建者才能完成。所以会借助到单例或者工厂一起使用。

拓展:

需求,构建类似于一个对象,但是对象构建时,属性很多。有可能忘记属性,或者属性没写全。那么当前这个对象就无法创建,通过创建者模式解决问题。

实现代码:

f37dc4a274fb90bbdf75051d54856f83.png

实现代码

测试类:

30ec64893fc584f5054ea0d71b601ad8.png

测试类

PS:大家有什么想要分享的内容!可以在评论下方留言!!!

更多行业资讯请关注:百战程序员,喜欢请分享转发

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

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

相关文章

一文读懂电感器的原理、结构、作用及分类

电感器是能够把电能转化为磁能而存储起来的元件。电感器的结构类似于变压器,但只有一个绕组。电感器具有一定的电感,它只阻碍电流的变化。 如果电感器在没有电流通过的状态下,电路接通时它将试图阻碍电流流过它;如果电感器在有电流…

final关键字与static对比

final关键字与static对比 static关键字修饰变量时,会使该变量在类加载时就会被初始化,不会因为对象的创建再次被加载,当变量被static 修饰时就代表该变量只会被初始化一次 例如图中所示,被static修饰的变量j,虽然创建…

juce中的BailOutChecker

界面库中值得注意的一点就是对象响应事件的时候自身被删除了,那么后续的访问自然就会出问题,所以需要在响应事件之后先添加引用,相关处理之后再查看自身是否已经被删除,如果已经被删除那么就直接退出。juce中通过BailOutChecker来…

java quartz 跳过_Java Quartz计划作业-禁止同时执行作业

我正在使用Quartz Job执行特定任务。我也在我的Main应用程序类中安排它的执行,而我试图完成的工作是不允许同时执行此作业的实例。因此,调度程序仅应在其先前实例完成后才执行作业。这是我的工作班级:public class MainJob implements Job {s…

mac USB串口工具配置

安装USB serial 驱动 我的usb serial芯片是 pl2303, 先到官网上下载对应驱动,并安装。安装完成之后会要求重启。 http://www.prolific.com.tw/admin/Technology/GetFile.ashx?fileID238 安装 minicom https://alioth.debian.org/projects/minicom/ 下载源码&…

macpro生成公钥并查看公钥

打开macpro的终端输入以下命令: $ cd ~/.ssh $ ls 此时发现没有那个id_rsa.pub文件,没有,就需要创建公钥 用ssh-keygen创建公钥 此时已经有了

java join 源码_join on 和where 一起使用的细节

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。full join:外…

SSIS 学习之旅 FTP访问类

这章把脚本任务访问FTP的方法 全部给大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上) 第二章:SSIS 学习之旅 第一个SSIS 示例(二&#…

Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient

http 连接池能提升性能 http 的背景原理 a. 两台服务器建立 http 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。 b. Http 连接需要的 3 次握手 4 次分手开销很大,这一开销对于大量的比较小的 http 消息来说更大。…

Java容器坐标起点_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点...

【单选题】【单选题】【单选题】class A{ int x1; void func1(int x1){ this.x1 x1; } } 关于上述程序,说法错误的是( )【单选题】浏览器的作用是( )。【判断题】构建大学生心理危机预警及干预工作机制,更好地帮助有严重心理问题的学生度过心理难关,及早预防、及时疏导、有效干…

自媒体工具:文本内容转音频文件实用小工具

目录 ​编辑 1、软件介绍 2、软件技术框架 3、使用说明 4、核心代码文件 5、注意事项 1、软件介绍 文本内容转转音频文件小工具,采用C#编程语言,基于Framework4.5开发,主要采用百度语音识别SDK,实现了在线文本内容转音频文件的功能…

IDEA 创建 SpringCloud项目-多项目方式

SpringCloud 虽然可以用多模块化的方式来创建,但是,SpirngCloud本身就是为分布式而准备的,如果使用多模块的话,那就是一个项目,偏离了分布式的概念。所以工程上还是常用多项目的方式,这样才可以分开布署各个…

php位运算重要吗,PHP位运算的用途

下面为大家带来一篇PHP位运算的用途。现在就分享给大家,也给大家做个参考。一起过来看看吧在实际应用中可以做用户权限的应用我这里说到的权限管理办法是一个普遍采用的方法,主要是使用到”位运行符”操作,& 位与运算符、| 位或运行符。参…

盘点6款实用的文件对比工具,你都用过吗?

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

aggregations 详解1(概述)

aggregation分类 aggregations —— 聚合,提供了一种基于查询条件来对数据进行分桶、计算的方法。有点类似于 SQL 中的 group by 再加一些函数方法的操作。 聚合可以嵌套,由此可以组成复杂的操作(Bucketing聚合可以包含sub-aggregation&#…

IDEA开发中,类的头位置生成作者时间信息

点击 File > Settings > File and Code Templates > Class按照图中步骤添加如下信息 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * Author WangZeyu * Date ${…

提现接口网站 php,API提现接口

>获取提现积分的类型,在后台可以设置某种积分可被提现,此处获取的数据为可提现积分的类型~~~[api]get:/index.php/accounts/Apipoint/member_withdrawal_listint:type 0#是否智能限制提现积分类型,0:不智能,1&#…

数据库:PostgreSQL 和 MySQL对比

比较版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官方社区版版权情况:PostgreSQL 11(免费开源)、MySQL5.7 Oracle官方社区版(免费开源) 1. CPU限制 PGSQL没有CPU核心数限制&a…

C#获取当前系统磁盘符、系统目录、桌面等

1.获取方式如下 Environment.SpecialFolder中定义了许多常用的目录 //获取当前系统磁盘符方法1,返回:C: string path Environment.GetEnvironmentVariable("systemdrive"); //获取当前系统磁盘符方法2,返回:C: string path Envir…

MAC电脑常用效率工具推荐

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…