建造者(秒懂设计模式之建造者模式(Builder pattern))
Posted
篇首语:运气就是机会碰巧撞到了你的努力。本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者(秒懂设计模式之建造者模式(Builder pattern))相关的知识,希望对你有一定的参考价值。
建造者(秒懂设计模式之建造者模式(Builder pattern))
为什么要学设计模式?设计模式有哪些优点?
提升查看框架源码能力
提升自己对复杂业务代码设计能力以及code能力
对今后面试以及职场道路打下扎实的基础
这是我之前写工厂模式的时候给大家提的一些优点,感兴趣的伙伴可以再去复习一下。
今天我们要讲的是设计模式中三种模式(创建型模式、行为型模式、结构型模式)中的创建型模式中的建造者模式,也可以叫Builder模式。
与其他的创建型模式比如工厂模式一样都是用来服务相同的目标,但是他们的作用场景不一样,实现方式不一样而已,但最终的目的都是一个:就是为了让我们写出结构严谨,易懂且易扩展的高质量代码。
建造者模式
什么叫建造者?他的应用场景又是什么呢?
当我们需要实列化一个复杂的类,以得到不同结构类型和不同的内部状态的对象时,我们可以用不同的类对它们的实列化操作逻辑分别进行封装,这些类我们就称之为建造者。
当我们需要来之同一个类,但是要就有不同结构对象时,就可以通过构造另一个建造者来进行实列化。
----------以上定义来自《设计模式之美》。
为了加深理解我们再来一个流程图
从图中我们主以看出建造者主要分为4种角色:
Product(产品类) :我们具体需要生成的类对象
Builder(抽象建造者类):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能
ConcreteBuilder(具体建造者类):实现我们要生成的类对象
Director(导演类):确定构建我们的类对象具体有哪些模块属性,在实际应用中可以不需要这个角色,直接通过client处理
举例
在电商中有多种不同类型的商品 普通实物商品,电子卡券商品,虚拟视频学习商品 等多种不同的商品,他们都是商品但是他们的属性却不一样,电子卡券:独有券码,学习视频:独有视频链接等。
那我们要怎么实现这种这种创建商品呢?
我们先看下最普通的创建方式:
我们先创建一个基础商品Item类:
这里我们可以看到根据请求类型,也可以完全创建出我们想要的类型商品,但是一个商品属性不可能只有这么一点属性,那以后扩展更多呢?那这个代码我们看上去就会很臃肿,也不好维护。
接下来我们就看下建造者模式怎么去实现:
第一步:创建我们的抽象建造者类。这里面我们看下有三个抽象方法,来确定不同的商品类型,我们调用不同的方法,达到解偶的思想
第二步:创建具体建造者类。对抽象建造者类的抽象方法进行实现赋值,达到我们所需要的结果。
第三步:创建我们的导演类。指导我们怎么去创建对象,这个我们是可以简化的,视具体使用场景确定吧!
最后就是看我们的测试结果了。在省略导演类的时候其实我们也完全可以的构建出我们想要的结果,因为我这写的是测试demo所以没有写传参,这个大家可以根据自己的实际应用场景去做改造。
与普通的写法相比建造者模式的写法使的这个代码可读性高,而且易扩展,不同类型的商品达到了解耦合的效果。
举例二:
假设我们现在有另外的一种场景,我们复制一个商品时,当没有填写库存时我们默认是0,当用户填写了时我们库存数量不能大于999999999。
那我们要怎么去实现呢?
PS:商品复制这个功能在电商领域是很普通的一个操作,对用户来说简化操作成本,提升用户体检。技术服务于业务,业务决定公司的长远利益
我们在内部创建了一个ItemBuilder,来处理我们的校验逻辑。当然我们使用普通的get,set方式其实也是可以实现的。
看到这里可能有人会问这个与我们使用get或者set方法又有什么区别呢?
解释:主要是为了解决我们的赋值处于一种无效状态
无效状态指的是对象属性之间存在依赖关系,合法校验等,如果使用set方式会导致这种关系和校验得不到验证,所有可能会存在无效的状态,即A、B两个属性必须同时设置,缺一不可,然后set方法可能导致遗漏等
总结
以上就是我要跟大家了解的建造者模式,其实我还是想跟大家分享这种思想吧,像第二个列子大家也可以用于写配置文件(比如我们的链接池,里面很多必填或者不必填参数,同时也可以避免在因为属性值过多而写构造方法时产生不好维护,不雅观的现象)等,因为我一直在电商公司工作,所以我举的列子都是以电商为主。
只有我们了解了每种设计模式解决了什么问题,我们才知道哪种场景用什么模式或者多种设计模式进行组合,避免产生因强行使用设计模式,反而使得代码更加的不好维护了。
参考资料:《设计模式之美》
好啦以上就是本期全部内容,我是敖丙,你知道的越多,你不知道的越多,我们下期见。
敖丙把自己的面试文章整理成了一本电子书,共 1630页!
干货满满,字字精髓。目录如下,还有我复习时总结的面试题以及简历模板,现在免费送给大家。
回复【资料】有我准备的一线大厂面试资料和简历模板
相关参考
建造者2牧场(《勇者斗恶龙建造者2》今日发售 构筑你的自由世界)
...史克威尔艾尼克斯开发的《勇者斗恶龙》系列角色扮演+建造游戏《勇者斗恶龙:建造者2》终于正式发售了!这样一款有着类似《我的世界》方块像素风格的建造游戏,能为我们带来哪些新奇的体验呢?跟着小编一起往下看吧!...
木头是天然材料吗(当年建造故宫时,使用的木材来自哪里?为什么不会腐烂?)
...叹于故宫的宏伟壮观,同时又有很多疑问。比如故宫当年建造时的木材来自何方?几百年过去,为什么这些木头仍然完好如初,不会腐烂?要了解这些问题,还要首先从故宫的建造者说起。01故宫是谁建的,距离现在有多久?明...
温室大棚连栋工程,是近几年发展起来的一项新型农业技术,它以高标准的现代温室为载体、采用现代农业高新技术成果和现代温室管理方法而进行的一种高效农业生产方式。温室大棚连栋工程具有投资少、建设快、效益高等特...
来源:解放军报微信·中国军号都是知识点!解放军报微信和您一起学习党的二十大报告486、坚持和完善社会主义基本经济制度,毫不动摇巩固和发展_______经济,毫不动摇鼓励、支持、引导_______经济发展,充分发挥市场在资源...
潍坊冬暖式日光温室建造(30年前首笔大棚设施贷款成就今天“寿光模式”)
王乐义(右)介绍第七代大棚内的装置。“30年前,多亏当时的农村信用社给我们批了贷款,让我们建起冬暖式蔬菜大棚,否则寿光蔬菜产业不会有今天的成绩。”6月28日,时隔30年后,再次见到当年的贷款单据,寿光市孙家集街道三元朱村...
潍坊冬暖式日光温室建造(30年前首笔大棚设施贷款成就今天“寿光模式”)
王乐义(右)介绍第七代大棚内的装置。“30年前,多亏当时的农村信用社给我们批了贷款,让我们建起冬暖式蔬菜大棚,否则寿光蔬菜产业不会有今天的成绩。”6月28日,时隔30年后,再次见到当年的贷款单据,寿光市孙家集街道三元朱村...
1、教师能考一级建造师。只要毕业时间够、专业对是可以报考的。2、一级建造师“考全科”报考条件凡遵守国家法律、法规,具备下列条件之一者,可以申请参加一级建造师资格考试:(1)取得工程类或工程经济类大学专科学...
一级建造师条件如下:1、凡遵守国家法律、法规,具备下列条件之一者,可以申请参加一级建造师执业资格考试:取得工程类或工程经济类大学专科学历,工作满6年,其中从事建设工程项目施工管理工作满4年。2、取得工程类...
二级建造师考试免考科目的条件如下:1、免考单科:取得工程类或工程经济类大学专科以上学历并拥有满15年的建设项目施工管理工作经验,或已取得工程或工程经济类中级及以上专业技术职务任职资格的人士,在取得建设...
...家法律、法规,具备下列条件之一者,可以申请参加一级建造师执业资格考试:1、取得工程类或工程经济类大学专科学历,工作满6年,其中从事建设工程项目施工管理工作满4年。2、取得工程类或工程经济类大学本科学历,工...