标签:loggerDetail java String level 优雅 构建 userIp LoggerDetail public
构建者模式,参考 go-elastic-client对象的构建,由于参数非常多而且后期会有比较大的变动的可能
正常的想法:
function build(a,b,c,d,e,f,g,h,i,j...) function build(a,b,c,...) function build(a,b,...)
随着参数的增多 builder方法会一直增多
并且可变参总是不够灵活,有时候需要2个或者更多个可变参数
优雅一些的写法:
package com.example.one.po; import lombok.Data; @Data public class LoggerDetail { private String userName; private String userIp; private String level; public static LoggerDetail builder(String userName,OptionFunc ...optionFunc){ LoggerDetail loggerDetail = new LoggerDetail(); loggerDetail.setUserName(userName); for (OptionFunc func : optionFunc) { func.set(loggerDetail); } return loggerDetail; } }
定义的接口:
package com.example.one.po; public interface OptionFunc { void set(LoggerDetail loggerDetail); }
后续就是不断的实现 OptionFunc 进行扩充参数
level :
package com.example.one.po; public class SetLevel implements OptionFunc{ private String level; @Override public void set(LoggerDetail loggerDetail) { loggerDetail.setLevel(level); } public SetLevel(String level){ this.level = level; } }
userIp
package com.example.one.po; public class SetUserIp implements OptionFunc{ private String userIp; @Override public void set(LoggerDetail loggerDetail) { loggerDetail.setUserIp(userIp); } public SetUserIp(String userIp){ this.userIp = userIp; } }
调用的方式:
@Test public void TestLoggerDetail (){ LoggerDetail loggerDetail = LoggerDetail.builder( "jack", new SetUserIp("127.0.0.1"), new SetLevel("warn") ); System.out.println(loggerDetail); }
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back
标签:loggerDetail,java,String,level,优雅,构建,userIp,LoggerDetail,public 来源: https://www.cnblogs.com/xuweiqiang/p/16350241.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。