lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧程序员黄小斜

lombok中的builder注解本质上是为你生成了一个构造器Builder类,通过这个类我们可以构造出带此注解的对象。本质上它实现了设计模式中一种经典的模式:建造者模式

1.认识:

①一句话来说:封装一个复杂对象的构建过程,并可以按步骤构造。因为需要对对象一步步建造起来,所以称为建造者模式。

②将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过程,同时它隔离了复杂产品对象的创建和使用,使得相同的创建过程能够创建不同的产品。但是若内部变化复杂,会有很多的建造类。

2.UML类图:

UML说明:Product(产品角色):一个具体的产品对象。Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口。ConcreteBuilder(具体建造者):实现抽象接口,构建和装配各个部件。Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

3.代码如下:

1.产品类:

publicclassProduct{privateStringpart1;//可以是任意类型privateStringpart2;privateStringpart3;/**setget方法省略}

2.抽象建造者

publicabstractclassBuilder{Productproduct=newProduct();publicabstractvoidbuildPart1();publicabstractvoidbuildPart2();publicabstractvoidbuildPart3();publicProductgetResult(){returnproduct;};}

3.具体建造者

publicclassConcreteBuilderextendsBuilder{@OverridepublicvoidbuildPart1(){System.out.println("建造part1");}@OverridepublicvoidbuildPart2(){System.out.println("建造part2");}@OverridepublicvoidbuildPart3(){System.out.println("建造part3");}}

4.指挥者:

publicclassDirector{privateBuilderbuilder;publicDirector(Builderbuilder){this.builder=builder;}publicProductbuild(){builder.buildPart1();builder.buildPart2();builder.buildPart3();returnbuilder.getResult();}}

5.客户端

publicclassClient{@Testpublicvoidtest(){Builderbuilder=newConcreteBuilder();Directordirector=newDirector(builder);director.build();}}

6.执行结果

4.总结

优点:1、建造者独立,易扩展。将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过程。

2、便于控制细节风险。它隔离了复杂产品对象的创建和使用,使得相同的创建过程能够创建不同的产品。

缺点:1、产品必须有共同点,范围有限制。

2、如内部变化复杂,会有很多的建造类,导致系统庞大。

应用场景1、需要生成的对象具有复杂的内部结构。2、需要生成的对象内部属性本身相互依赖。

5.应用场景

JAVA中的StringBuilder。

设计模式是一种解决问题的思维和方式,不要生搬硬套,为了设计模式而模式。

教程简介

正文

1、生活中的建造者模式

1、盖房子

我们在生活中盖房子,一般就是打地基,盖框架「用砖头或钢筋混凝土」,然后是粉刷。基本上就是这个路子。当然我们这些工作全部可以自己做,可也以找几个工人去干,当然还可以可以直接找一个设计师,直接说我就要这样的房子,然后就不管了,最后问设计师「设计师给一张纸给工人,工人就啪啪的干了」验收房子即可「至于你是如何建的过程我不关心,我只要结果」---这就是建造者模式

2、组装电脑

我们买的电脑都是由主板、内存、cpu、显卡等组成,如何把这些东西组装起来给用户这就是建造者模式的作用,不同的人对电脑的配置需求不一样的「打游戏的对显卡要求高」,但是电脑构成部件是固定的,我们找电脑城的装机人员把电脑装起来这一过程就是建造模式

3、软件开发

我们开发一款产品,需要技术主管、产品经理、苦逼的程序员。在这里,产品经理就是指挥者「Director」和客户沟通,了解产品需求,技术主管是抽象的建造者[Builder],让猿们杂做就杂做,而程序员就是体力劳动者「即具体的建造者,按照技术主管下发的任务去做」---这就是一个接近完美的建造者模式「为什么说接近呢?因为没有百分之百,靠:又忘记吃药了」

2、程序中的建造者模式

建造者模式的定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,这是官方定义,通俗的说就是:建造者模式就是如何一步步构建一个包含多个组成部件的对象,相同的构建过程可以创建不同的产品

建造者模式的特点

建造者模式是一种创建型模式,适用于那些流程固定「顺序不一定固定」,建造的目标对象会有所改变这种场景「比如画一条狗,这个目标不变,但是不同的是有黄狗,胖狗,瘦狗等」,还有一种场景是代替多参数构造器

建造者模式的作用

建造者模式的结构

建造者模式简单的UML

1、组装电脑

组装电脑简单的UML

根据UML撸码

/***CreatedbyTigerChain*产品类--被建造的对象*/publicclassComputer{privateStringcpu;//cpuprivateStringhardDisk;//硬盘privateStringmainBoard;//主板privateStringmemory;//内存...省略getter和setter}复制代码

/***CreatedbyTigerChain*抽象的建造者,即装电脑的步骤*至于安装什么型号的主板,不是我关心,而是具体的建造者关心的*/publicinterfaceBuilder{//安装主板voidcreateMainBoard(StringmainBoard);//安装cpuvoidcreateCpu(Stringcpu);//安装硬盘voidcreatehardDisk(StringhardDisk);//安装内存voidcreateMemory(Stringmemory);//组成电脑ComputercreateComputer();}复制代码

/***CreatedbyTigerChain*具体的建造者,这里是商场的一个装机人员*/publicclassAssemblerBuilderimplementsBuilder{privateComputercomputer=newComputer();@OverridepublicvoidcreateCpu(Stringcpu){computer.setCpu(cpu);}@OverridepublicvoidcreatehardDisk(StringhardDisk){computer.setHardDisk(hardDisk);}@OverridepublicvoidcreateMainBoard(StringmainBoard){computer.setMainBoard(mainBoard);}@OverridepublicvoidcreateMemory(Stringmemory){computer.setMemory(memory);}@OverridepublicComputercreateComputer(){returncomputer;}}复制代码

/***CreatedbyTigerChain*测试类*/publicclassTest{publicstaticvoidmain(Stringargs[]){ //装机员小美Builderbuilder=newAssemblerBuilder();//老板把小明的需求转给小美Direcrordirecror=newDirecror(builder);//老板最后拿到成品机子,工作全由小美去做Computercomputer=direcror.createComputer("Intel酷睿i97900X","三星M9T2TB(HN-M201RAD)","技嘉AORUSZ270X-Gaming7","科赋CrasII红灯16GBDDR43000");System.out.println("小明这台电脑使用的是:\n"+computer.getMainBoard()+"主板\n"+computer.getCpu()+"CPU\n"+computer.getHardDisk()+"硬盘\n"+computer.getMainBoard()+"内存\n");}}复制代码

怎么样,至于小张,小猪要装机把自己要的配置给老板即可,然后老板如何装机不用你管,你就等着收装好的机子吧

2、盖房子

盖房子的基本步骤和流程是固定的无非就是打地基、盖框架、然后浇筑「至于盖平房、还是楼房那是每个客户的具体需求」。总体来说盖房子以有以三种方式:

盖房子建造者模式简单的UML

/***CreatedbyTigerChain*最终的产品---房子*/publicclassHouse{//打地基privateStringfoundation;//盖框架privateStringframe;//浇筑privateStringpouring;...省略setter和getter}复制代码

publicinterfaceHouseBuilder{//打地基voiddoFoundation();//盖框架voiddoFrame();//浇灌voiddpPouring();//房子建成HousegetHouse();}复制代码

/***CreatedbyTigerChain*盖平房*/publicclassPingFangBuilderimplementsHouseBuilder{privateHousehouse=newHouse();@OverridepublicvoiddoFoundation(){house.setFoundation("盖平房的地基");}@OverridepublicvoiddoFrame(){house.setFrame("盖平房的框架");}@OverridepublicvoiddpPouring(){house.setPouring("盖平房不用浇灌,直接人工手刷就可以");}@OverridepublicHousegetHouse(){returnhouse;}}复制代码

/***CreatedbyTigerChain*盖楼房*/publicclassLouFangBuilderimplementsHouseBuilder{privateHousehouse=newHouse();@OverridepublicvoiddoFoundation(){house.setFoundation("盖楼房的地基就打十米深");}@OverridepublicvoiddoFrame(){house.setFrame("楼房的框架要使用非常坚固钢筋混凝土");}@OverridepublicvoiddpPouring(){house.setPouring("楼房拿个罐车把框架拿混凝土灌满即可");}@OverridepublicHousegetHouse(){returnhouse;}}复制代码

/***CreatedbyTigerChain*设计师*/publicclassHouseDirector{//指挥包工头publicvoidbuildHouse(HouseBuilderhouseBuilder){houseBuilder.doFoundation();houseBuilder.doFrame();houseBuilder.dpPouring();}}复制代码

我们对比了三种方式,自己盖房子,找工人盖房子,找设计师盖房子来逐步感受一下建造者模式的优点

可以看到最后一种最舒服,盖房子的时候直接外包给设计师自己就不用管了,到时候问设计师要建好的成品房子即可,这样对客户来说具体如何盖房子我不需要知道,屏蔽细节「只能说有钱就是任性」

THE END
1.自建房设计软件前十名排行榜APP推荐豌豆荚自建房设计软件前十名排行榜榜单为您提供最新自建房设计软件前十名排行榜大全,这里不仅有自建房设计软件前十名排行榜安卓版本APP、历史版本应用下载资源,还有类似自建房设计软件前十名排行榜的应用推荐,欢迎大家前来豌豆荚下载。https://www.wandoujia.com/bangdan/545944/
2.自己画房子用什么软件?自己画房子平面图app自己画房子用什么软件呢?大家日常需要绘画房屋平面图需要频繁的在电脑上进行绘制,这样的方式非常拖延时间,今天小编就给大家专门整理一期自己画房子平面图app,能提高大家的绘制效率,并且还能简单标注,轻松制作完整且准确的房屋平面图,并且不同的绘画工具还可以满足用户的绘画需求,有需要的小伙伴可以来小编这里一起下载体验http://www.downcc.com/k/zjhfzpmtapp/
3.免费房屋设计软件排行榜前十名偏玩手游盒子分享十大免费房屋设计软件排行榜前十名手机应用,编辑为您推荐手机免费房屋设计软件排行榜第一名到前5名到前十名的应用。找免费房屋设计软件有哪些、免费房屋设计软件哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-899960
4.房屋装修设计软件免费版下载室内装修设计app装修设计软件手机版装修设计软件是常用的设计软件。小编为大家整理了实用的装修设计软件合集,其中有72xuan装修设计软件、91家居装修设计软件等等。强大的功能足以让你自己设计创造出自己喜爱的房间,欢迎大家来当易网下载体验!http://www.downyi.com/key/zhuangxiushejiruanjian
5.免费设计房子软件,有没有免费房屋设计软件建筑设计2、我想找一个手机软件APP可以自己设计户型自己装修房子 3、有没有免费的家装设计软件 4、自己设计房子软件手机什么手机软件可以在手机上设计房屋外观内饰_百度 家装设计常用软件有推荐么?想自己设计一下刚买的房子 SketchUp:这是一款功能强大且易于使用的三维建模软件,适合初学者和专业设计师使用。你可以使用SketchUhttp://zhongzhijs.com/post/18.html
6.装修设计软件有哪些2024免费装修设计软件精选DreamPlan是一款功能强大的房屋设计软件,提供了创建逼真的3D房子模型和整修项目工具。用户可以使用该软件规划房屋改造项目,并使用模拟软件预览更改效果。DreamPlan具有易于操作的界面和人性化的功能,允许用户从头开始构建整个房子以及周围的表面,并且还提供了内置工具进行绘制墙壁、窗户、门、地板等元素。每个项目都有自己的属性https://app.zol.com.cn/jiqiao/289546.html
7.手机自建房画图设计软件下载农村自建房画图app手机那么cad类的手机软件自然是各行各业的制图软件首选,毕竟无论是家装设计,建筑工程机械等等都非常适合利用CAD软件,这类软件即可以测量,也可以绘画、设计、批注。下面小编就给大家带来了手机自建房画图设计软件大全,有需求的小伙伴可以来下载体验。 更新时间:2024-12-17 12:54:28共有16款https://www.ddooo.com/zt/macdoudizhu.htm
8.建筑工程毕业实习报告(精选15篇)很多时候觉得自己没有受到领导重用,所干的只是一些无关重要的杂活,自己的提议或工作不能得到老板的肯定。做不出成绩时,会有来自各方面的压力,老板的眼色同事的嘲讽。而在学校,有同学老师的默默关心和支持,每日只是上上课,很轻松。常言道:工作一两年胜过十多年的读书。2个月的实习时间让我从中学到了很多知识,关于https://www.fwsir.com/Article/html/Article_20230312135746_2523745.html
9.3DHome帮您轻松玩转三维家装设计软件教程今天我们为大家推荐一款很棒的简单三维室内设计软件——3D Home Architect Deluxe(以下简称3D Home)。 一、初识3D Home 3D Home是一个非常简单易用的家居设计软件,上手非常容易,建墙、安门、开窗、铺地板等都非常简单,只需用鼠标拖动、双击、输入数据即可。该软件还带有非富多样的家具库、各种样式的门窗库等,并提https://www.unjs.com/ziliaoku/dn/209495.html
10.云风的BLOG:杂记Archives但是,在千万级人口的城市中全民自测,显然结果是不可信的,这是我下面想谈的主要问题:如何设计一个方案,即降低了全民检测的成本,又能保持结果的可信度。即:如果有人自测发现自己阳性(或干脆不想自测),因为恐惧隔离而瞒报的问题。 Posted by 云风 at 07:32 PM|Permalink|Comments (46) https://blog.codingnow.com/ooc/
11.建筑工程专业的毕业实习报告(通用13篇)这种方式真的已经不是新闻了,我也担心那些克扣拖欠民工工资的人有一天习惯了,不以为然了,民工们怎么办?拖欠民工工资历来是建筑行业的一大问题,因为很多老板是通过贷款来修房子,再卖了房子发工钱,或者直接走人。现在的银行应该建立严格的信贷制度来支持建设支持民工,让辛苦为祖国建设服务的民工没有后顾之忧,在建筑https://m.oh100.com/a/202205/4707703.html
12.自己设计建房子的软件指南目前市面上有很多自己设计建房子的软件,比如SketchUp、Sweet Home 3D、Floorplanner等。可以根据自己的需求和技能选择合适的软件。 自己设计建房子的软件需要具备哪些功能? 自己设计建房子的软件需要具备绘制平面图、立体图、渲染、材质、灯光、家具、窗帘、地毯等功能,同时还需要支持导出文件,以便后期使用。 https://www.3vjia.com/seo/seodetail/00041/06128.html
13.建房设计图软件app,用什么软件可以自己设计房子的平面图啊office provol非常不错 ,当然acd也是不过没前者专业。 装修工长讲解装修设计及自己设计的软件推荐,希望在装修方面帮到您。 AutoCAD2006、2004还有2008的都可以啊 只看到过 cad 其他就不知道了 cad就可以了 2,有没有可以制作图纸的软件中文的就是建房子那种图纸 http://www.qiatong.com/yy/shwd/51094.html
14.软件设计理论(转)把软件开发与你所熟知的事情联系在一起,从而使你对其有更深刻的理解(隐喻).特别是建筑 将软件设计和建造房子联系起来考虑会有非常深的理解. 软件设计基本上分下面几步: 1.系统描述,问题定义. 知道自己想要个什么样的东西.比如在建房子前要知道自己是想要个几居室的,还是别墅,或者只是想给自家的小狗做个狗窝. https://blog.csdn.net/qiubo_shd/article/details/6196006
15.阮一峰的网络日志FeedsAnywhereShow Popular Find a Feed ? Show Previews ? Show Combined View ? Show Compact View ? Show Title View -Show Popular -Find a Feed Navigation j/kselects the next/previous item in the list n/pin title view, selects the next item without opening it https://feedsanywhere.com/feed/39994
16.中华人民共和国民法典知识学习手册按照《省委依法治省委员会关于印发〈关于贯彻落实习近平总书记视察贵州重要讲话精神 积极推进民法典实施工作方案〉的通知》(贵法委发〔2021〕3号)有关要求,结合司法行政工作实际,梳理汇总了学习民法典的相关文章和知识点,供系统干部职工学习了解。 https://mwr.guizhou.gov.cn/ztjj/rdzt/tjslyfzzjkjsfzzf/pfxc/202109/t20210923_76596593.html
17.公司年终工作总结(精选17篇)公司明年开始做住宅,由于之前没有做过相应的工作,感到自己身上的担子很重,而自己的学识、能力和阅历与其任职都有一定的距离,所以不敢掉以轻心,向总监学习,从网上多看,多收集资料,感觉自己这段时间,在平面上还是有一点进步的。经过这段时间的学习、积累,能够处理日常工作中出现的设计问题。在组织管理能力、综合分析https://www.ruiwen.com/gongwen/gongzuozongjie/864805.html
18.没有建设工程规划许可证就说明房屋是违建?法律对此如何规定?没有建设工程规划许可证就说明房屋是违建?法律对此如何规定? 《城市规划法》第31条规定“在城市规划区内进行建设需要申请用地的,必须持国家批准建设项目的有关文件,向城市规划行政主管部门申请定点,由城市规划行政主管部门核定其用地位置和界限,提供规划设计条件,核发建设用地规划许可证。https://m.64365.com/zs/1520741.aspx
19.髀设?谈谢英俊谈建筑与乡村建设:如何让农民自己盖房子如果你觉得自己的毕业设计/论文有助于创造更公平、更开放、更和睦、更可持续的城市,不想让它们默默无闻地躺在学校资料库里,希望让更多人了解,并可能把它变成现实。快来联系我们吧! 这里没有专业限制,没有研究领域的限制。更不限学历、年龄、地区等。 https://www.thepaper.cn/newsDetail_forward_1375435
20.筑龙学社筑龙学社|筑龙网-建筑教育行业引领者,面向设计师,建造师,工程师,造价师,bim等建设全专业人群,提供注考取证及技能培训课程,建筑图纸及资料文档免费下载交流服务。https://www.zhulong.com/
21.农村自己修建房子外型设计图,房屋平面布局舒适合理农村现在自己修建房子的很多了,房子外观也有很多样式,很多农村人自家修建房子首先会考虑房子的外观,因此高颜值的房子外观会受到一些人的喜爱,今天为大家带来一款农村自己修建房子外型设计图,这款小巧的欧式观效果图片受到了很多人的亲睐,房屋平面布局也很舒适合理,适合农村修建。 https://www.jianfang8.com/show-22-2914-1.html