Java创建型模式之建造者模式怎么实现
导读:本文共2235.5字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 一.介绍建造者模式(Builder Pattern)属于创建型模式。如果一个对象具有复杂的内部结构或者内部属性本身相互依赖(有顺序要求),甚至对象中的某些属性的创建也有一个很复杂的过程,就可以使用建造者模式二.UML类图三.具体代码业务代码publicclassProduct{privateStringpart1;privateStringpart2;pu... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。一.介绍
建造者模式(Builder Pattern)属于创建型模式。如果一个对象具有复杂的内部结构或者内部属性本身相互依赖(有顺序要求),甚至对象中的某些属性的创建也有一个很复杂的过程,就可以使用建造者模式
二.UML类图
三.具体代码
业务代码
publicclassProduct{privateStringpart1;privateStringpart2;publicProduct(Stringpart1,Stringpart2){this.part1=part1;this.part2=part2;}@OverridepublicStringtoString(){return"Product{"+"part1='"+part1+'\''+",part2='"+part2+'\''+'}';}}//控制每个部件的具体创建interfaceBuilder{voidbuildPart1(Stringpart1);voidbuildPart2(Stringpart2);Productbuild();}classChinaBuilderimplementsBuilder{privateStringpart1;privateStringpart2;@OverridepublicvoidbuildPart1(Stringpart1){this.part1="国产"+part1;}@OverridepublicvoidbuildPart2(Stringpart2){this.part2="国产"+part2;}@OverridepublicProductbuild(){returnnewProduct(part1,part2);}}//控制组装部件的顺序classDirector{privateBuilderbuilder;publicDirector(Builderbuilder){this.builder=builder;}publicProductconstruct(Stringpart1,Stringpart2){builder.buildPart1(part1);builder.buildPart2(part2);returnbuilder.build();}}
测试代码
publicclassBuilderTest{publicstaticvoidmain(String[]args){Directordirector=newDirector(newChinaBuilder());Productproduct=director.construct("传感器","芯片");System.out.println(product);//Product{part1='国产传感器',part2='国产芯片'}}}
四.lombok的@Builder注解(拓展)
我们先以静态内部类的方式实现简单场景下的建造者模式(以优雅的链式调用代替set)
业务代码
publicclassProduct{privateStringpart1;privateStringpart2;publicProduct(Stringpart1,Stringpart2){this.part1=part1;this.part2=part2;}@OverridepublicStringtoString(){return"Product{"+"part1='"+part1+'\''+",part2='"+part2+'\''+'}';}staticclassBuilder{privateStringpart1;privateStringpart2;publicBuilderpart1(Stringpart1){this.part1=part1;returnthis;}publicBuilderpart2(Stringpart2){this.part2=part2;returnthis;}publicProductbuild(){returnnewProduct(part1,part2);}}}
测试类
publicclassProductTest{publicstaticvoidmain(String[]args){Productproduct=newProduct.Builder().part1("传感器").part2("芯片").build();System.out.println(product);//Product{part1='传感器',part2='芯片'}}}
下面看看lombok的@Builder注解的实现
业务代码
@BuilderpublicclassProduct{privateStringpart1;privateStringpart2;}
在IDEA中打开Product.class文件,可以看出实际就是使用的简单场景的建造者模式
////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernFlowerdecompiler)//packagecom.designpattern.create.builder.lombok;publicclassProduct{privateStringpart1;privateStringpart2;Product(Stringpart1,Stringpart2){this.part1=part1;this.part2=part2;}publicstaticProduct.ProductBuilderbuilder(){returnnewProduct.ProductBuilder();}publicstaticclassProductBuilder{privateStringpart1;privateStringpart2;ProductBuilder(){}publicProduct.ProductBuilderpart1(Stringpart1){this.part1=part1;returnthis;}publicProduct.ProductBuilderpart2(Stringpart2){this.part2=part2;returnthis;}publicProductbuild(){returnnewProduct(this.part1,this.part2);}publicStringtoString(){return"Product.ProductBuilder(part1="+this.part1+",part2="+this.part2+")";}}}
五.在Spring中的应用
org.springframework.web.servlet.mvc.method.RequestMappingInfo.DefaultBuilder
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
Java创建型模式之建造者模式怎么实现的详细内容,希望对您有所帮助,信息来源于网络。