创建模式

前言
创建者模式一般用于,当一个类的内部数据过于复杂的时候(比如各个属性在设置值的什么要写一大坨代码才可以完成),并且还创建这样的对象不是一个,而是根据不同场景创建多种,并且属性类型基本一样,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。

正文
在看正文前我继续给大家模拟一个生活场景,通俗的为大家解释什么是创建者。

场景:一个暴发户找一家建筑设计公司设计一栋商业和一栋住宅,我们假设这是两个对象,商业和住宅都有相同的属性,比如材料、楼层、结构等,设计公司把图纸和需求给了施工单位,施工单位按照要求完成了施工,交给设计公司一栋商业和一栋住宅,设计公司很满意,把这两个对象交给了暴发户。不考虑实际情况,在上面的场景里,暴发户根本不用操心这个楼是哪个施工单位,那个工人一砖一瓦建成的,他只关注跟设计公司提的需求,设计公司就要满足他,所以该过程屏蔽了用户和建造过程的细节。

所以,我们总结出构建者模式

适用场景
对复杂对象的创建和使用进行隔离。
多个部件都可以装配到一个对象中,但产生的运行结果不相同。
对象非常复杂或者对象因为调用顺序不同而产生不同作用。
初始化一个对象时,参数过多,或者很多参数具有默认值。
适合创建差异性很小的对象,对象具备很强共性。
 

主要作用
用户不必关心对象的建造过程和细节的情况下就可以直接创建复杂的对象。
方便用户创建很多类似或者说相同属性对复杂对象。
代码复用性 & 封装性。
 

建造者模式的主要角色
产品角色(Product):它是包含多个组成部件的复杂对象和属性,是一个模型。

抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口或者抽象类,通常还包含一个返回复杂产品的方法 ,该方法一般是抽象并且返回值类型是产品角色(Product)。

具体建造者(Concrete Builder):实现 Builder 接口或者继承Builder 抽象类,完成复杂产品的各个部件的具体创建方法。

指挥者(Director):它调用建造者(Builder)中的部件构造与装配方法完成复杂对象的创建,不设计产品具体构建细节。

总结:

使用建造者模式可以使客户端不必知道产品内部组成的细节。易于扩展具体建造者,并且具体建造者 之间没有依赖关系。但是缺点很明显,所有的具体建造者 都要用相同的 产品属性,要共用一个模型,想打破这一局面可以用工厂方法,或者使用抽象工厂,大家有没有发现工厂模式与建造者有些共性呢。

视频链接:https://www.bilibili.com/video/BV1ja4y1t7mU/

猜你喜欢

转载自www.cnblogs.com/llfnpbd/p/12587717.html