当前位置: 首页 > 科技观察

工作中的设计模式-建造者模式

时间:2023-03-19 15:00:44 科技观察

前言建造者模式是一种创造型设计模式,它使您能够逐步创建复杂的对象。此模式允许您使用相同的创建代码来生成不同类型和形式的对象。一个Builder类将一步步构建最终的对象。此Builder类独立于其他对象。1使用场景建造者模式在阅读源码的过程中经常见到,主要是为了简化复杂对象的创建。那些房子的具体例子我就不说了,主要是着眼于实际工作中的应用。@Builder注解如果你使用过lombok框架,你一定对@Builder注解不陌生。@Data@BuilderpublicclassUserRespVo{/***用户名*/privateStringuserName;/***用户id*/privateStringuserId;publicstaticvoidmain(String[]args){UserRespVorespVo=UserRespVo.builder().userId("liuzhihang").userName(《程序员小航》).build();}}看看编译好的.class文件。publicclassUserRespVo{privateStringuserName;privateStringuserId;UserRespVo(finalStringuserName,finalStringuserId){this.userName=userName;this.userId=userId;}publicstaticUserRespVo.UserRespVoBuilderbuilder(){returnnewUserRespVo.UserRespVoBuilder();}publicstaticclassUserRespVoBuilder{privateStringuserName;privateVStringUserId){privateStringuserName;privateStringBuilderId))VopublicUserRespVo.UserRespVoBuilderuserName(finalStringuserName){this.userName=userName;returnthis;}publicUserRespVo.UserRespVoBuilderuserId(finalStringuserId){this.userId=userId;returnthis;}publicUserRespVobuild(){returnnewUserRespVo(this.userName,this.userId);}}}其实就是在内部创建了一个Builder的静态内部类和一个builder()方法。这样就可以进行链式调用了。对于复杂对象的创建,小伙伴们也可以使用lombok的方法,先创建一个builder对象,然后一步步构建对象。在源码和工作中阅读源码或使用开源软件时,经常会遇到builder模式,比如OkHttp3UtilsprivatestaticOkHttpClientclient=newOkHttpClient.Builder().readTimeout(60,TimeUnit.SECONDS).connectTimeout(60,TimeUnit.SECONDS).writeTimeout(120,TimeUnit.SECONDS).build();比如Eureka源码中InstanceInfo的构建。例如InstanceInfo.Builder,使用Elasticsearch创建客户端代码RestClientrestClient=RestClient.builder(newHttpHost("localhost",9200,"http"),newHttpHost("localhost",9201,"http")).build();也喜欢MybatisPlus,blahblahblah...2总结本文介绍了构建器模式在工作中的使用,因为这是工作中经常看到的一种设计模式。只是很多人往往忽略了,再看各种材料,有房有窗,云里雾里有一大堆代码。冷静,冷静,不需要。其实很多设计模式都是在不知不觉中用到的,只是没有总结出来而已。相关资料[1]《深入设计模式》:https://refactoringguru.cn/design-patternss[2]封面图:https://refactoringguru.cn/design-patterns/builder