Java 建造者模式 详解Java实践之建造者模式
小傅哥 人气:0一、前言
无论承接什么样的需求,是不是身边总有那么几个人代码写的烂,但是却时常有测试小姐姐过来聊天(求改bug)、有产品小伙伴送吃的(求写需求)、有业务小妹妹陪着改代码(求上线),直至领导都认为他的工作很重要,而在旁边的你只能蹭点吃的。
这样的小伙伴,可能把代码写的很直接,ifelse
多用一点,满足于先临时支持一下,想着这也没什么的。而且这样的业务需求要的急又都是增删改查的内容,实在不想做设计。而如果有人提到说好好设计下,可能也会被反对不要过渡设计。
第一次完成产品需求实在是很快,但互联网的代码不比传统企业。在传统行业可能一套代码能用十年,但在互联网高速的迭代下你的工程,一年就要变动几十次。如果从一开始就想着只要完成功能就可以,那么随之而来的是后续的需求难以承接,每次看着成片成片的代码,实在不知如何下手。
在研发流程规范下执行,才能写出好程序!
一个项目的上线往往要经历业务需求
、产品设计
、研发实现
、测试验证
、上线部署
到正式开量
,而这其中对研发非常重要的一换就是研发实现的过程,又可以包括为;架构选型
、功能设计
、设计评审
、代码实现
、代码评审
、单测覆盖率检查
、编写文档
、提交测试
。所以在一些流程规范下,其实很难让你随意开发代码。
开发代码的过程不是炫技
,就像盖房子如果不按照图纸来修建,回首就在山墙上搭一个厨房卫浴!可能在现实场景中这很荒唐,但在功能开发中却总有这样的代码。
所以我们也需要一些设计模式的标准思想,去建设代码结构,提升全局把控能力。
二、开发环境
1.JDK 1.8
2.Idea + Maven
工程 | 描述 |
---|---|
itstack-demo-design-3-00 | 场景模拟工程,模拟装修过程中的套餐选择(豪华、田园、简约) |
itstack-demo-design-3-01 | 使用一坨代码实现业务需求,也是对ifelse的使用 |
itstack-demo-design-3-02 | 通过设计模式优化改造代码,产生对比性从而学习 |
三、建造者模式介绍
建造者模式所完成的内容就是通过将多个简单对象通过一步步的组装构建出一个复杂对象的过程。
那么,哪里有这样的场景呢?
例如你玩王者荣耀的时的初始化界面;有三条路、有树木、有野怪、有守卫塔等等,甚至依赖于你的网络情况会控制清晰度。而当你换一个场景进行其他不同模式的选择时,同样会建设道路、树木、野怪等等,但是他们的摆放和大小都有不同。这里就可以用到建造者模式来初始化游戏元素。
而这样的根据相同的物料
,不同的组装所产生出的具体的内容,就是建造者模式的最终意图,也就是;将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
四、案例场景模拟
这里我们模拟装修公司对于设计出一些套餐装修服务的场景。
很多装修公司都会给出自家的套餐服务,一般有;欧式豪华、轻奢田园、现代简约等等,而这些套餐的后面是不同的商品的组合。例如;一级&二级吊顶、多乐士涂料、圣象地板、马可波罗地砖等等,按照不同的套餐的价格选取不同的品牌组合,最终再按照装修面积给出一个整体的报价。
这里我们就模拟装修公司想推出一些套餐装修服务,按照不同的价格设定品牌选择组合,以达到使用建造者模式的过程。
4.1、场景模拟工程
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(地砖)
,这么四项内容。(实际的装修物料要比这个多的多)
4.2、场景简述
4.2.1、物料接口
public interface Matter { String scene(); // 场景;地板、地砖、涂料、吊顶 String brand(); // 品牌 String model(); // 型号 BigDecimal price(); // 价格 String desc(); // 描述 }
物料接口提供了基本的信息,以保证所有的装修材料都可以按照统一标准进行获取。
4.2.2、吊顶(ceiling)
一级顶
public class LevelOneCeiling implements Matter { public String scene() { return "吊顶"; } public String brand() { return "装修公司自带"; } public String model() { return "一级顶"; } public BigDecimal price() { return new BigDecimal(260); } public String desc() { return "造型只做低一级,只有一个层次的吊顶,一般离顶120-150mm"; } }
二级顶
public class LevelTwoCeiling implements Matter { public String scene() { return "吊顶"; } public String brand() { return "装修公司自带"; } public String model() { return "二级顶"; } public BigDecimal price() { return new BigDecimal(850); } public String desc() { return "两个层次的吊顶,二级吊顶高度一般就往下吊20cm,要是层高很高,也可增加每级的厚度"; } }
4.2.3、涂料(coat)
多乐士
public class DuluxCoat implements Matter { public String scene() { return "涂料"; } public String brand() { return "多乐士(Dulux)"; } public String model() { return "第二代"; } public BigDecimal price() { return new BigDecimal(719); } public String desc() { return "多乐士是阿克苏诺贝尔旗下的著名建筑装饰油漆品牌,产品畅销于全球100个国家,每年全球有5000万户家庭使用多乐士油漆。"; } }
立邦
public class LiBangCoat implements Matter { public String scene() { return "涂料"; } public String brand() { return "立邦"; } public String model() { return "默认级别"; } public BigDecimal price() { return new BigDecimal(650); } public String desc() { return "立邦始终以开发绿色产品、注重高科技、高品质为目标,以技术力量不断推进科研和开发,满足消费者需求。"; } }
4.2.4、地板(floor)
德尔
public class DerFloor implements Matter { public String scene() { return "地板"; } public String brand() { return "德尔(Der)"; } public String model() { return "A+"; } public BigDecimal price() { return new BigDecimal(119); } public String desc() { return "DER德尔集团是全球领先的专业木地板制造商,北京2008年奥运会家装和公装地板供应商"; } }
圣象
public class ShengXiangFloor implements Matter { public String scene() { return "地板"; } public String brand() { return "圣象"; } public String model() { return "一级"; } public BigDecimal price() { return new BigDecimal(318); } public String desc() { return "圣象地板是中国地板行业著名品牌。圣象地板拥有中国驰名商标、中国名牌、国家免检、中国环境标志认证等多项荣誉。"; } }
4.2.5、地砖(tile)
东鹏
public class DongPengTile implements Matter { public String scene() { return "地砖"; } public String brand() { return "东鹏瓷砖"; } public String model() { return "10001"; } public BigDecimal price() { return new BigDecimal(102); } public String desc() { return "东鹏瓷砖以品质铸就品牌,科技推动品牌,口碑传播品牌为宗旨,2014年品牌价值132.35亿元,位列建陶行业榜首。"; } }
马可波罗
public class MarcoPoloTile implements Matter { public String scene() { return "地砖"; } public String brand() { return "马可波罗(MARCO POLO)"; } public String model() { return "缺省"; } public BigDecimal price() { return new BigDecimal(140); } public String desc() { return "“马可波罗”品牌诞生于1996年,作为国内最早品牌化的建陶品牌,以“文化陶瓷”占领市场,享有“仿古砖至尊”的美誉。"; } }
加载全部内容