跳至主要內容

[设计模式]-创建型-Builder模式

holic-x...大约 3 分钟设计模式设计模式

[设计模式]-创建型-Builder模式

基本概念

​ 建造者模式:将⼀个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

​ 通过将多个简单对象一步步组装构建出一个复杂对象的过程。适用于一些基本物料不变,但其组合经常变化的场景

​ 场景举例:建造者模式初始化游戏元素(根据用户的网络资源等情况构建不同清晰度的游戏场景和不同模式下的游戏元素)

​ Builder设计模式满⾜了单⼀职责原则以及可复⽤的技术、建造者独⽴、易扩展、便于控制细节⻛险。但同时当出现特别多的物料以及很多的组合后,类的不断扩展也会造成难以维护的问题。但这种设计结构模型可以把重复的内容抽象到数据库中,按照需要配置。这样就可以减少代码中⼤量的重复。

应用场景案例

【1】套餐装修服务场景

场景介绍:模拟装修公司提供套餐装修服务的场景(不同物料商品的组合),根据不同商品的组合最终出一个报价

实现说明:物料构建、装修套餐组合、Builder

​ 1>定义父接口构建物料的基本信息(场景类型、品牌、价格、型号、描述等),定义子类实现该接口

定义Matter父接口,对外提供物料的基本信息获取的接口定义
定义子类接口实现Matter父接口(根据自定义type字段划分不同种类的物料,其余字段则限定同一种类不同品种的物料)

​ 2>传统实现方式:根据指定场景用if-else组合不同的物料以生成相应的套餐组合,构建List接收相应的物料生成组合套餐详情

通过指定的套餐限定不同物料组合(if...else...实现),物料组装、信息填充、价格合计

​ 3>Builder模式:

定义IMenu装修包接口(物料组装系列方法:appendXXX(包括物料信息组装和价格累计)、信息填充:getDetail)
定义DecorationPackageMenu装修包实现IMenu
定义方法构建装修包详情:new DecorationPackageMenu(xxx).appendXXX系列方法

​ 考虑业务扩展性,亦可将组合套餐以配置的形式存储到数据库中,页面便可自动加载

【2】MyBatis扩展

​ 在Mybatis环境的初始化过程中,SqlSessionFactoryBuilder会调用XMLConfigBuilder读取所有的MybatisMapConfig.xml和所有的*Mapper.xml文件,构建Mybatis运行的核心对象Configuration对象,然后将该Configuration对象作为参数构建一个SqlSessionFactory对象

​ 其中XMLConfigBuilder在构建Configuration对象时,也会调用XMLMapperBuilder用于读取*Mapper文件,而XMLMapperBuilder会使用XMLStatementBuilder来读取和build所有的SQL语句

​ 在这个过程中,有一个相似的特点,就是这些Builder会读取文件或者配置,然后做大量的XpathParser解析、配置或语法的解析、反射生成对象、存入结果缓存等步骤,因此大量采用了Builder模式来解决。对于builder的具体类,方法都大都用build*开头,例如SqlSessionFactoryBuilder包含诸多buildXXX系列方法:即根据不同的输入参数来构建SqlSessionFactory这个工厂对象

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3