一、建造者模式介绍
建造者模式所完成的内容就是通过将多个简单对象通过一步步的组装构建出一个复杂对象的过程**。那么,哪里有``这样的场景呢?
例如你玩王者荣耀的时的初始化界面;有三条路、有树木、有野怪、有守卫塔等等,甚至依赖于你的网络情况会控制清晰度。而当你换一个场景进行其他不同模式的选择时,同样会建设道路、树木、野怪等等,但是他们的摆放和大小都有不同。这里就可以用到建造者模式来初始化游戏元素。
而这样的根据相同的物料
,不同的组装所产生出的具体的内容,就是建造者模式的最终意图,也就是;将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
**
四、案例场景模拟
这里我们模拟装修公司对于设计出一些套餐装修服务的场景。
**
很多装修公司都会给出自家的套餐服务,一般有;欧式豪华、轻奢田园、现代简约等等,而这些套餐的后面是不同的商品的组合。例如;一级&二级吊顶、多乐士涂料、圣象地板、马可波罗地砖等等,按照不同的套餐的价格选取不同的品牌组合,最终再按照装修面积给出一个整体的报价。
这里我们就模拟装修公司想推出一些套餐装修服务,按照不同的价格设定品牌选择组合,以达到使用建造者模式的过程。
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(地砖)
,这么四项内容。(实际的装修物料要比这个多的多)
五、用一坨坨代码实现
讲道理没有ifelse解决不了的逻辑,不行就在加一行!
每一个章节中我们都会使用这样很直白的方式去把功能实现出来,在通过设计模式去优化完善。这样的代码结构也都是非常简单的,没有复杂的类关系结构,都是直来直去的代码。除了我们经常强调的这样的代码不能很好的扩展外,做一些例子demo工程还是可以的。
1. 工程结构
itstack-demo-design-3-01
└── src
└── main
└── java
└── org.itstack.demo.design
└── DecorationPackageController.java
一个类几千行的代码你是否见过,嚯?那今天就让你见识一下有这样潜质的类!
2. ifelse实现需求
https://bugstack.cn/itstack-demo-design/2020/05/26/%E9%87%8D%E5%AD%A6Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%AE%9E%E6%88%98%E5%BB%BA%E9%80%A0%E8%80%85%E6%A8%A1%E5%BC%8F.html
一、什么是建造者模式
1、生活中的建造者模式
1、盖房子
我们在生活中盖房子,一般就是打地基,盖框架「用砖头或钢筋混凝土」,然后是粉刷。基本上就是这个路子。当然我们这些工作全部可以自己做,可也以找几个工人去干,当然还可以可以直接找一个设计师,直接说我就要这样的房子,然后就不管了,最后问设计师「设计师给一张纸给工人,工人就啪啪的干了」验收房子即可「至于你是如何建的过程我不关心,我只要结果」—-这就是建造者模式
2、组装电脑
我们买的电脑都是由主板、内存、cpu、显卡等组成,如何把这些东西组装起来给用户这就是建造者模式的作用,不同的人对电脑的配置需求不一样的「打游戏的对显卡要求高」,但是电脑构成部件是固定的,我们找电脑城的装机人员把电脑装起来这一过程就是建造模式
3、软件开发
我们开发一款产品,需要技术主管、产品经理、苦逼的程序员。在这里,产品经理就是指挥者「Director」和客户沟通,了解产品需求,技术主管是抽象的建造者[Builder],让猿们杂做就杂做,而程序员就是体力劳动者「即具体的建造者,按照技术主管下发的任务去做」—- 这就是一个接近完美的建造者模式
2、程序中的建造者模式
建造者模式的定义
通俗的说就是:建造者模式就是如何一步步构建一个包含多个组成部件的对象,相同的构建过程可以创建不同的产品
建造者模式的特点
建造者模式是一种创建型模式,适用于那些流程固定「顺序不一定固定」,建造的目标对象会有所改变这种场景「比如画一条狗,这个目标不变,但是不同的是有黄狗,胖狗,瘦狗等」,还有一种场景是代替多参数构造器
建造者模式的作用
- 1、用户不知道对象的建造过程和细节就可以创建出复杂的对象「屏蔽了建造的具体细节」
- 2、用户只需给出复杂对象的内容和类型可以创建出对象
- 3、建造者模工按流程一步步的创建出复杂对象
建造者模式的结构
角色 | 类别 | 说明 |
---|---|---|
Builder | 接口或抽象类 | 抽象的建造者,不是必须的 |
ConcreateBuilder | 具体的建造者 | 可以有多个「因为每个建造风格可能不一样」 |
Product | 普通的类 | 具体的产品「即被建造的对象」 |
Director | 指挥者 | 统一指挥建造者去建造目标,指挥者不是必须的 |
建造者模式简单的 UML