当前位置: 首页 > 后端技术 > Java

建造者模式

时间:2023-04-02 01:36:45 Java

目录使用场景实现使用场景当一个类的构造函数需要四个或更多参数,并且部分参数可以为空时,可以考虑使用建造者模式。意识到如果现在有个pdf配置类,里面有size,title,author,color等字段,作者和color可以不传入,但是size和title是必须传入的,而且size有一个枚举值。然后可以进行下面的实现。公共类PdfConfig{publicstaticfinalStringA3="A3";publicstaticfinalStringA4="A4";/***尺寸*/privatefinalStringspecification;/***标题*/privatefinalStringtitle;/***作者*/privatefinalStringauthor;/***颜色*/privateStringcolor;privatePdfConfig(Builderbuilder){this.specification=builder.specification;this.title=builder.title;this.author=builder.author;this.color=builder.color;}@OverridepublicStringtoString(){return"PdfConfig{"+"specification='"+specification+'\''+",title='"+title+'\''+",author='"+author+'\''+",color='"+color+'\''+'}';}publicstaticclassBuilder{私有字符串规范;私有字符串标题;私人字符串作者;私有字符串颜色;publicBuildersetSpecification(Stringsf){this.specification=sf;归还这个;}publicBuildersetTitle(Stringtitle){this.title=title;setAuthor(字符串作者){this.author=author;归还这个;}publicBuildersetColor(Stringcolor){this.color=color;归还这个;}publicPdfConfigbuild(){if(!A3.equals(specification)&&!A4.equals(specification)){thrownewRuntimeException("Illegalsize");}elseif(title==null){thrownewRuntimeException("请输入标题");}返回新的PdfConfig(这个);}}}以下是它的使用过程,比不断地使用对象进行set或者使用构造函数传入固定参数publicclassPdfConfigDemo{“优雅多了”publicstaticvoidmain(String[]args){PdfConfigpdfConfig=newPdfConfig.Builder().setSpecification(PdfConfig.A3).setAuthor("eacape").setTitle("hello").build();系统输出。printf(pdfConfig.toString());在一些中间件和javaapi中,builder模式是比较常见的,比如lombok的@Builder和StringBuilder类