当前位置:首页 > Java知识 > 正文内容

java生成函数调用链(java怎么使用链表)

abcsky887个月前 (11-01)Java知识81

本文分享给大家的是:

set,get如下代码所示:publicclassUser {privateStringuserName;privateLonguserId;privateStringuserSex;privateString

java生成函数调用链(java怎么使用链表)

userAddress;privateStringuserJob;privateStringuserPhone;privateStringuserB的网站建设ornDate;}这种繁琐地set值的代码,会让我们的程序看起来特别臃肿,可读性变差,为了解决这一问题,我们常用的方法一种是创建带参数的构造函数,一种是找个别的类做转换。

但是,创建带参数的构造函数时,如果遇到参数太多,这个函数很长看起来很不友好的情况,而且会遇到我有时候创建需要5个,有时候需要2个参数,那就要求实体类要有多个不同参数的构造函数,要不然就在赋予参数的值的时候,直接就按最长的来,大不了用不到的位置set个null值,但是总之还是很不灵活。

二、建造者模式(Builder Pattern)解决上述问题,我们采用一种比较优雅的方式->链式调用:chained invocation(链式调的网站建设用)或者Method chaining,这种风格的API设计叫作

fluent API或者Fluent interface,常用于Builder Pattern(建造者模式)链式调用的本质就是在方法里面返回对象/其他来实现连续的调用2.1 什么是建造者模式?建造者模式是一种创建型。

设计模式, 使你能够分步骤创建复杂对象 该模式允许你使用相同的创建代码生成不同类型和形式的对象2.2 建造者模式基本介绍2.2.1 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。

它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对的网站建设象2.2.2 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

2.3 建造者模式适合应用场景2.3.1 使用建造者模式可避免 “重叠构造函数 (telescoping constructor)” 的出现2.3.2 当你希望使用代码创建不同形式的产品 (例如石头或木头房屋) 时, 可使用建造者模式。

2.3.3 使用建造者构造组合树或其他复杂对象2.4 建造者模式优缺点2.4.1 优点1.可以分步创建对象, 暂缓创建步骤或递归运行创建步骤2.生成不同形式的产品时, 可以复用相同的制造代码3.单一职责原则。

可以将复杂的网站建设构造代码从产品的业务逻辑中分离出来2.4.2 缺点由于该模式需要新增多个类,因此代码整体复杂程度会有所增加三、链式调用在java源码中的应用Java中,最常见的链式调用就是StringBuffer、StringBuilder。

类中的 append() 方法如下所示是StringBuilder类的源代码,篇幅所限,提取了部分代码做示例,实际开发中,我们可以通过连续的.append().append()方法来完成字符串的拼接如下代码所示:。

StringBuffer、StringBuilder 这两个类都继承自抽象类 AbstractStringBuilder,该抽象类中也有append() 方法p的网站建设ublicfinalclassStringBuilder。

extendsAbstractStringBuilderimplementsjava.io.Serializable, CharSequence{// ... 省略代码 .../*** @throws IndexOutOfBoundsException {@inheritDoc}

*/@OverridepublicStringBuilderappend(CharSequences, intstart, intend) {super.append(s, start, end);return

this; }@OverridepublicStri的网站建设ngBuilderappend(char[] str) {super.append(str);returnthis; }/*** @throws IndexOutOfBoundsException {@inheritDoc}

*/@OverridepublicStringBuilderappend(char[] str, intoffset, intlen) {super.append(str, offset, len);return

this; }@OverridepublicStringBuilderappend(booleanb) {super.append(b);returnthis; }的网站建设// ... 省略代码 ...

}四、实现方式4.1 通过内部类构建@DatapublicclassUser1 {// 真正的属性都是不可变的privatefinalintid;privatefinalStringname;private

finalStringjob;privatefinalStringaddress;privatefinalDatebirthday;// 私有构造方法,只被 Builder 类调用privateUser1

(Builderbuilder) {this.id=builder.id;this.name=builder.name;this.job=builder.job的网站建设;this.address=builder

.address;this.birthday=builder.birthday; }publicstaticclassBuilder {// 必须参数privateintid;privateString

name;privateDatebirthday;// 可选参数privateStringjob;privateStringaddress;publicBuilder(intid, Stringname

, Datebirthday) {this.id=id;this.name=name;this.birthday=birthday; }//使用设置好的参的网站建设数值新建 OperateLog 对象

publicUser1build(){returnnewUser1(this); }// 每个 setter 方法都返回当前的对象,做到链式调用publicBuildersetJob(String

job) {this.job=job;returnthis; }publicBuildersetAddress(Stringaddress) {this.address=address;return

this; } }}对象内部类的bulider大概分成四部分:1、 一个简单的内部类,里面的属性和User属性相同;2、 内部类的构造函数;3、 bulid方法,真正核心的网站建设的一个方法,直接返回一个

User实例;4、 属性的set方法,这一部分都是平行的方法;客户端类调用实例://建造者模式只有在调用build()之后才会创建OperateLog对象User1user1=newUser1.Builder。

(1,"小明",newDate()).setJob("软件工程师").setAddress("北京").build();4.2 使用lombok的@Builder注解@Data@AllArgsConstructor

@NoArgsConstructor@BuilderpublicclassUser2 {privateStringname;privateStringj的网站建设ob;}4.3 使用lombok的@RequiredArgsConstructor

和@NonNull注解@Data@Accessors(chain=true)@RequiredArgsConstructor(staticName="of")publicclassUser3 {@NonNull

privateStringname;privateStringjob;}客户端类分别采用上述3种方式构建对象:publicclassClient {publicstaticvoidmain(String

[] args) {// 第一种 建造者模式只有在调用build()之后才会创建User1对象User1u的网站建设ser1=newUser1.Builder(1,"小明",newDate()).setJob("软件工程师"

).setAddress("北京").build();System.out.println(user1);// 第二种User2user2=User2.builder().name("小明").job(

"软件工程师").build();System.out.println(user2);// 第三种User3user3=User3.of("小明").setJob("软件工程师");System.out

.println(user3); }}控制台输出:User1(id=1, name=小明的网站建设, job=软件工程师, address=北京, birthday=SunFeb1921:11:12CST2023

)User2(name=小明, job=软件工程师)User3(name=小明, job=软件工程师)五、什么情况下适合采用这种链式的方法调用?上述代码演示的链式调用,实际上是同一个对象的多个方法的连续调用。

也就是说,在这个长链中的每个方法返回的都是相同的类型、相同的对象,即当前对象本身例如,StringBuilder中append方法的连续调用,JSONObject中的accumulate、put等方法也可以连续调用。

这些被调用的方法都有“构建”的特性,都是用于完善实例对象使用链的网站建设式调用代码容易编写,看起来比较简洁也容易阅读和理解如果被调用的方法返回的类型不同,则不适合链式调用因为各方法返回的类型被隐藏了,代码不容易理解,另外在调试的时候也是比较麻烦的。

六、总结6.1 优点编程性强 、可读性强、代码简洁6.2 缺点不太利于代码调试七、参考 & 鸣谢1、学习笔记Java链式调用(方法链):https://www.jianshu.com/p/e41c0128197b。

2、【Java】子类的链式调用:https://www.cnblogs.com/quiet-snowy-day/p/6091233.html3、java设计模式之建造者模式:https://blog.csdn.的网站建设net/m0_47944994/article/details/127890221

您的每次阅读、每个点赞、每条评论都会激励到博主,博主也会更努力地持续输出优质内容!啊呜(゚▽゚)/ . Talk is cheap (‾◡◝) ! , show me your code ! ヾ(๑╹◡╹)ノ"。

举报/反馈

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/1193.html

分享给朋友:

“java生成函数调用链(java怎么使用链表)” 的相关文章

程序员年薪百万是什么水平的人(程序员年薪百万的多不多)

本文分享给大家的是: ● ● ●作者:西点王子链接:https://zhuanlan.zhihu.com/p/213744791、程序员见禅师程序员见禅师:我学了 hello world 和水仙花数,想自己开发个操作系统,希望大师指点。 禅师笑而不语,抓来一只鸡,在鸡腿上缠...

java基础知识面试题(java基础知识点笔记)

今天给各位分享 Java基础面试题2021最新(含答案下载)最近给大家整理了一批Java基础面试题一共110题,20201最新时间整理的,并且都含答案打包下载适宜阅读人群 需要面试的初/中/高级 java 程序员 想要查漏补缺的人。 想要不断完善和扩充自己 java 技术...

郑州java开发(郑州学it编程 java python 大数据培训)

本篇文章给大家谈谈 声明:本文只做机构汇总,不发表任何个人观点,排名不分先后,保证涉及机构的真实性如有遗漏欢迎补充此次分享的都是在郑州建有校区的机构,有本地机构也有连锁过来的(原谅我用连锁这个词),有部分机构和之前的北京篇汇总重复。 北大青鸟北大青鸟成立于1999年,一直以...

23江苏高考分数线(普通话报名官方入口2023江苏)

本篇文章给大家谈谈 原标题:23江苏五年制专转本三江学院计算机科学与技术专业 江苏五年制专转本三江学院计算机科学与技术专业C 语言程序设计计算机基础理论专业科目是由所报考的院校进行出卷,所以即使报考专业相同,主考院校不同,考试的类型、重点及录取分数线和人数都是不同的,学生需...

effective java中文版翻译太烂了(effective java在线阅读)

今天给各位分享   脚本之家你与百万开发者在一起 “我很希望我10年前就能拥有这本书有人可能认为我不需要任何Java方面的书籍,但是我需要这本书” ——Java之父James Gosling这段话出自Java之父JamesGosling对《Effecti...

计算机教育方向(计算机教育行业)

本篇文章给大家谈谈 原标题:国内高校计算机专业教学研讨:上好课是大学教师的竞争力“上好一堂课的几个原理”“第二课堂与竞争原标题:国内高校计算机专业教学研讨:上好课是大学教师的竞争力“上好一堂课的几个原理”“第二课堂与竞争力塑造”“学习的科学”这些看似中小学老师教研的题目,听众都是高...