重学Java设计模式:实战建造者模式小傅哥

乱码七糟[luànqībāzāo],我时常怀疑这个成语是来形容程序猿的!

无论承接什么样的需求,是不是身边总有那么几个人代码写的烂,但是却时常有测试小姐姐过来聊天(求改bug)、有产品小伙伴送吃的(求写需求)、有业务小妹妹陪着改代码(求上线),直至领导都认为他的工作很重要,而在旁边的你只能蹭点吃的。

那你说,CRUD的代码还想让我怎么样?

这样的小伙伴,可能把代码写的很直接,ifelse多用一点,满足于先临时支持一下,想着这也没什么的。而且这样的业务需求要的急又都是增删改查的内容,实在不想做设计。而如果有人提到说好好设计下,可能也会被反对不要过渡设计。

贴膏药似的修修补补,一次比一次恐怖!

第一次完成产品需求实在是很快,但互联网的代码不比传统企业。在传统行业可能一套代码能用十年,但在互联网高速的迭代下你的工程,一年就要变动几十次。如果从一开始就想着只要完成功能就可以,那么随之而来的是后续的需求难以承接,每次看着成片成片的代码,实在不知如何下手。

在研发流程规范下执行,才能写出好程序!

一个项目的上线往往要经历业务需求、产品设计、研发实现、测试验证、上线部署到正式开量,而这其中对研发非常重要的一换就是研发实现的过程,又可以包括为;架构选型、功能设计、设计评审、代码实现、代码评审、单测覆盖率检查、编写文档、提交测试。所以在一些流程规范下,其实很难让你随意开发代码。

开发代码的过程不是炫技,就像盖房子如果不按照图纸来修建,回首就在山墙上搭一个厨房卫浴!可能在现实场景中这很荒唐,但在功能开发中却总有这样的代码。

所以我们也需要一些设计模式的标准思想,去建设代码结构,提升全局把控能力。

建造者模式所完成的内容就是通过将多个简单对象通过一步步的组装构建出一个复杂对象的过程。

那么,哪里有这样的场景呢?

例如你玩王者荣耀的时的初始化界面;有三条路、有树木、有野怪、有守卫塔等等,甚至依赖于你的网络情况会控制清晰度。而当你换一个场景进行其他不同模式的选择时,同样会建设道路、树木、野怪等等,但是他们的摆放和大小都有不同。这里就可以用到建造者模式来初始化游戏元素。

而这样的根据相同的物料,不同的组装所产生出的具体的内容,就是建造者模式的最终意图,也就是;将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

这里我们模拟装修公司对于设计出一些套餐装修服务的场景。

很多装修公司都会给出自家的套餐服务,一般有;欧式豪华、轻奢田园、现代简约等等,而这些套餐的后面是不同的商品的组合。例如;一级&二级吊顶、多乐士涂料、圣象地板、马可波罗地砖等等,按照不同的套餐的价格选取不同的品牌组合,最终再按照装修面积给出一个整体的报价。

这里我们就模拟装修公司想推出一些套餐装修服务,按照不同的价格设定品牌选择组合,以达到使用建造者模式的过程。

itstack-demo-design-3-00└──src└──main└──java└──org.itstack.demo.design├──ceilling│├──LevelOneCeiling.java│└──LevelTwoCeiling.java├──coat│├──DuluxCoat.java│└──LiBangCoat.java│└──LevelTwoCeiling.java├──floor│├──DerFloor.java│└──ShengXiangFloor.java├──tile│├──DongPengTile.java│└──MarcoPoloTile.java└──Matter.java在模拟工程中提供了装修中所需要的物料;ceilling(吊顶)、coat(涂料)、floor(地板)、tile(地砖),这么四项内容。(实际的装修物料要比这个多的多)

publicinterfaceMatter{Stringscene();//场景;地板、地砖、涂料、吊顶Stringbrand();//品牌Stringmodel();//型号BigDecimalprice();//价格Stringdesc();//描述}2.2吊顶(ceiling)一级顶

publicclassLevelOneCeilingimplementsMatter{publicStringscene(){return"吊顶";}publicStringbrand(){return"装修公司自带";}publicStringmodel(){return"一级顶";}publicBigDecimalprice(){returnnewBigDecimal(260);}publicStringdesc(){return"造型只做低一级,只有一个层次的吊顶,一般离顶120-150mm";}}二级顶

publicclassLevelTwoCeilingimplementsMatter{publicStringscene(){return"吊顶";}publicStringbrand(){return"装修公司自带";}publicStringmodel(){return"二级顶";}publicBigDecimalprice(){returnnewBigDecimal(850);}publicStringdesc(){return"两个层次的吊顶,二级吊顶高度一般就往下吊20cm,要是层高很高,也可增加每级的厚度";}}2.3涂料(coat)多乐士

publicclassDuluxCoatimplementsMatter{publicStringscene(){return"涂料";}publicStringbrand(){return"多乐士(Dulux)";}publicStringmodel(){return"第二代";}publicBigDecimalprice(){returnnewBigDecimal(719);}publicStringdesc(){return"多乐士是阿克苏诺贝尔旗下的著名建筑装饰油漆品牌,产品畅销于全球100个国家,每年全球有5000万户家庭使用多乐士油漆。";}}立邦

publicclassLiBangCoatimplementsMatter{publicStringscene(){return"涂料";}publicStringbrand(){return"立邦";}publicStringmodel(){return"默认级别";}publicBigDecimalprice(){returnnewBigDecimal(650);}publicStringdesc(){return"立邦始终以开发绿色产品、注重高科技、高品质为目标,以技术力量不断推进科研和开发,满足消费者需求。";}}2.4地板(floor)德尔

publicclassDerFloorimplementsMatter{publicStringscene(){return"地板";}publicStringbrand(){return"德尔(Der)";}publicStringmodel(){return"A+";}publicBigDecimalprice(){returnnewBigDecimal(119);}publicStringdesc(){return"DER德尔集团是全球领先的专业木地板制造商,北京2008年奥运会家装和公装地板供应商";}}圣象

publicclassShengXiangFloorimplementsMatter{publicStringscene(){return"地板";}publicStringbrand(){return"圣象";}publicStringmodel(){return"一级";}publicBigDecimalprice(){returnnewBigDecimal(318);}publicStringdesc(){return"圣象地板是中国地板行业著名品牌。圣象地板拥有中国驰名商标、中国名牌、国家免检、中国环境标志认证等多项荣誉。";}}2.5地砖(tile)东鹏

publicclassDongPengTileimplementsMatter{publicStringscene(){return"地砖";}publicStringbrand(){return"东鹏瓷砖";}publicStringmodel(){return"10001";}publicBigDecimalprice(){returnnewBigDecimal(102);}publicStringdesc(){return"东鹏瓷砖以品质铸就品牌,科技推动品牌,口碑传播品牌为宗旨,2014年品牌价值132.35亿元,位列建陶行业榜首。";}}马可波罗

publicclassMarcoPoloTileimplementsMatter{publicStringscene(){return"地砖";}publicStringbrand(){return"马可波罗(MARCOPOLO)";}publicStringmodel(){return"缺省";}publicBigDecimalprice(){returnnewBigDecimal(140);}publicStringdesc(){return"“马可波罗”品牌诞生于1996年,作为国内最早品牌化的建陶品牌,以“文化陶瓷”占领市场,享有“仿古砖至尊”的美誉。";}}五、用一坨坨代码实现讲道理没有ifelse解决不了的逻辑,不行就在加一行!

每一个章节中我们都会使用这样很直白的方式去把功能实现出来,在通过设计模式去优化完善。这样的代码结构也都是非常简单的,没有复杂的类关系结构,都是直来直去的代码。除了我们经常强调的这样的代码不能很好的扩展外,做一些例子demo工程还是可以的。

itstack-demo-design-3-01└──src└──main└──java└──org.itstack.demo.design└──DecorationPackageController.java一个类几千行的代码你是否见过,嚯?那今天就让你见识一下有这样潜质的类!

编写测试类:

@Testpublicvoidtest_DecorationPackageController(){DecorationPackageControllerdecoration=newDecorationPackageController();//豪华欧式System.out.println(decoration.getMatterList(newBigDecimal("132.52"),1));//轻奢田园System.out.println(decoration.getMatterList(newBigDecimal("98.25"),2));//现代简约System.out.println(decoration.getMatterList(newBigDecimal("85.43"),3));}结果:

-------------------------------------------------------装修清单套餐等级:1套餐价格:198064.39元房屋面积:132.52平米材料清单:吊顶:装修公司自带、二级顶、平米价格:850元。涂料:多乐士(Dulux)、第二代、平米价格:719元。地板:圣象、一级、平米价格:318元。-------------------------------------------------------装修清单套餐等级:2套餐价格:119865.00元房屋面积:98.25平米材料清单:吊顶:装修公司自带、二级顶、平米价格:850元。涂料:立邦、默认级别、平米价格:650元。地砖:马可波罗(MARCOPOLO)、缺省、平米价格:140元。-------------------------------------------------------装修清单套餐等级:3套餐价格:90897.52元房屋面积:85.43平米材料清单:吊顶:装修公司自带、一级顶、平米价格:260元。涂料:立邦、默认级别、平米价格:650元。地砖:东鹏瓷砖、10001、平米价格:102元。Processfinishedwithexitcode0六、建造者模式重构代码接下来使用建造者模式来进行代码优化,也算是一次很小的重构。

建造者模式主要解决的问题是在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的过程构成;由于需求的变化,这个复杂对象的各个部分经常面临着重大的变化,但是将它们组合在一起的过程却相对稳定。

这里我们会把构建的过程交给创建者类,而创建者通过使用我们的构建工具包,去构建出不同的装修套餐。

itstack-demo-design-3-02└──src├──main│└──java│└──org.itstack.demo.design│├──Builder.java│├──DecorationPackageMenu.java│└──IMenu.java└──test└──java└──org.itstack.demo.design.test└──ApiTest.java建造者模型结构

工程中有三个核心类和一个测试类,核心类是建造者模式的具体实现。与ifelse实现方式相比,多出来了两个二外的类。具体功能如下;

好,那么接下来会分别讲解几个类的具体实现。

@Testpublicvoidtest_Builder(){Builderbuilder=newBuilder();//豪华欧式System.out.println(builder.levelOne(132.52D).getDetail());//轻奢田园System.out.println(builder.levelTwo(98.25D).getDetail());//现代简约System.out.println(builder.levelThree(85.43D).getDetail());}

THE END
1.装修模拟软件排行榜前十名装修模拟软件为你的房间室内装修设计提供实用的装修经验、家装效果图,装修模拟软件软件通过丰富的家装案例,让您的家更美。装修模拟软件内有各式装修风格照,房间、客厅、阳台等各种类别兼有,同时装修模拟软件应用内有本地收藏功能登,非常适合用户闲暇时刻欣赏。https://m.pianwan.com/s/zj-1478092
2.设计师无法拒绝的家装空间su模型,轻松搞定甲方!对于设计师来说,家装空间SU模型提供了丰富的素材资源,包括客厅、餐厅、厨房、卫生间、卧室和阳台等多个空间的设计素材。这些SU模型不仅涵盖了现代简约到古典奢华等多种风格,还提供了详细的材质表现和光影效果,能够为设计师提供强有力的支持。此外,SU模型还支持多种格式的下载,如SKP和JPG,方便设计师在不同平台上使用https://www.justeasy.cn/news/21713.html
3.游戏版实地挑战版787878知识本内容涉及装修效果平面图及游戏版实地挑战版787878的描述。具体内容包括对装修效果图的详细描述以及对游戏版实地挑战版的具体说明。http://good.hnspacenet.com/post/35224.html
4.小区住宅范文12篇(全文)目前, 住宅的使用寿命按其设计图纸来说一般是在5O年左右, 人们用几十年以至终身的积蓄来购买一栋房屋, 在使用之后就要报废, 这种现实的现象实在是有点不符合中国国情, 所以人们很迫切的要求提高住宅的耐久性, 现在超耐久型混凝土的研究正在兴起, 在不远的将来有望使混凝土的耐久性达到几百年以至上千年, 当住宅采https://www.99xueshu.com/w/ikeyddfv8ais.html
5.中式建筑(精选十篇)中国馆“东方之冠”的造型,极具特色的中国红,伫立在世博园中,每一个炎黄子孙一眼便能认出。 本文的中式建筑指在现代主义建筑风格设计的基础上加入中式装饰符号的建筑。这种现代中式根据现代人简约时尚的生活特质而设计,在建筑布局和功能结构上迎合现代人的思想和生活习惯,参照现代人的消费心理来做,体现使用者的文化https://www.360wenmi.com/f/cnkeylm0zknm.html
6.装修房子的游戏推荐最新大全装修房子的游戏推荐下载分享房屋设计大师游戏是一款真实模拟的创造建设类手机游戏,房屋设计大师游戏真实的还原了建设场景,还能跟随天气的变化而变化。房屋设计大师游戏需要玩家展开丰富的想象力,才能建造出更完美 房屋。更多 人气预约榜TOP100 订阅最新信息 需下载豌豆荚 A P P No.4 https://www.wandoujia.com/bangdan/1292557/
7.类似房产达人的装修游戏有哪些类似房产达人的装修游戏推荐类似《房产达人》的装修游戏是以房屋购买、翻新和出售为核心玩法的模拟经营类游戏。这些游戏让玩家扮演房屋翻新专家或房地产开发商的角色,通过投资房产、设计和装修来提升房产价值并获得利润。一些类似的游戏包括《室内设计模拟器》、《家居设计师》和《翻新专家》。这些游https://down.ali213.net/heji/lsfcdrdzxyx/
8.中国传统民居有哪些装修'>北京四合院,陕西窑洞,湖南吊脚楼,藏族碉房,傣族竹楼,徽派建筑等 https://www.to8to.com/ask/k552052.html
9.23种设计模式详解(全23种)总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备https://blog.csdn.net/qq_25086397/article/details/125103647
10.2022模拟房屋装修手游大全房屋装修设计手游推荐如何装饰自己的房间是很多人头疼的一个问题,而装饰房间手游可以让玩家模拟装饰房间,体现出不同的效果,模拟真实房子装修游戏,各位小伙伴想不想自己装修房子,虽然我们现在不能自己设计装修,但是我们可以在游戏里体验一下,自由的设计装修,没有任何需要顾虑的,那么有哪些好玩的http://m.yx007.com/k/mnfwzxsy/
11.罗雨林丨岭南园林建筑砖雕的历史探究广州美术学院陈雨田教授在番禺沙湾考察时,从古庙宇的废砖堆中,捡获到一件明代戏曲人物砖雕:高23.5厘米,造型简练,衣饰不加雕饰,落刀非常准确、利索;人物神情生动、传神,线条有力;采用夸张的造型手法,运用恰当的雕刻手段,让单色的砖雕富有黑、白、灰等色彩效果,使人感觉出黑、白、灰色的丰富调子,体现了当时广东砖雕http://www.hnctgy.com.cn/info/1040/1943.htm
12.读书笔记(建筑初步)书评第一章建筑概论1.1 怎样认识建筑1.1.1 建筑及其范围从古至今建筑的目的总不外是取得一种人为的环境,供人们从事各种活动。不但提供给人们一个有遮掩的内部空间,同时也带来了一个不同于原来的外部空间。某些特殊的工程,像纪念碑、凯旋门以及某些桥梁、水坝等的艺术造型部分,也属于建筑的范围。1.1.2 建筑技术和建筑艺术https://book.douban.com/review/6516211/
13.家装玩法游戏大全好玩的家装玩法游戏推荐家装玩法游戏大全介绍:将破破烂烂的毛坯房装修一新,结合你的独特审美,添置进更多的家具,好玩的家装玩法游戏有哪些?玩家需要扮演一名家居设计师,通过完成各种任务,来不断去打造出更多风格独特的小屋,满足顾客的需求的同时加入自己的装修理解,家装玩法游戏大全分享给你。http://m.9k9k.com/tags/6525/
14.3d模拟房子装修游戏手机版3d模拟房子装修游戏大全3d模拟房子装修游戏手机版是模拟装修房子的游戏,并且3d的游戏画面拥有更加沉浸式的体验,从全方位的角度查看房子的装修细节,从装修的所有方面都可以自己定制,你能想到的装修步骤这里都有,快来装修你的小家,把自己的想法实现在其中,将会带来独一无二的设计,下面小编就http://www.downcc.com/k/3dmonifangzizhuangxiuyouxi/
15.模拟设计房屋的手游推荐模拟设计房屋的手游有哪些模拟设计房屋的手游有哪些?小编整理了真实模拟设计房子的手机游戏合集,在游戏中我们可以按照自己的喜好来装修房间,打造各种不同装修风格的房屋,另外游戏内大家还能了解到一些关于房屋设计方面的知识。下面合集中的游戏玩法轻松休闲,不肝不氪,而且趣味性十足,各位感兴趣的朋友们快来下载体验吧。 展开全部 合并http://m.doyo.cn/zhuanti/mnsjfwdsjyx/
16.以闪亮之名玩法介绍游戏问答欢迎投喂精灵小鼠,投喂小仓鼠有机会获得金币、基础色卡、遇之钥等奖励,累积亲密度还可领取五星饰品【花https://www.9game.cn/wenda/580719.html
17.房屋设计模拟游戏合集参与房屋设计模拟游戏推荐房屋设计模拟游戏合集带给玩家一些可以模拟设计房屋的游戏,玩家可以在游戏之中尝试模拟建造房屋,在游戏之中选择不同的材料和设计风格,超级有趣的模拟房屋设计游戏绝对值得一试!,要听下载站https://www.333ttt.com/zt/fangwushejmoniyxhj/
18.用最简单的经济理论解释世界,读《新卖桔者言》这本书用闲话家常的文字来处理司空见惯的现象。记得在旧《卖桔者言》的某次再版的引言中,我说该书的普及是因为它不“科”而教。这是区区在下的独得之秘,当然保存着。当年可没有想到,二十五年后的今天,老人家还是宝刀未老。 用真实世界的例子示范怎样解释世事,卖桔者的方法牵涉到的理论不多,也浅,不需要真https://www.huxiu.com/article/1228/8.html