设计模式之建造者模式

#需求

建造者属于创建型设计模式
主要作用就是创建对象 创建对象与使用对象的2者区分开来,
举个例子
如果有一天你需要买房,买房子的步骤一共分成3个步骤,找房源,去看房,付款,一共执行这3步,那么这座房子就属于你了, 防止你以后有更多的钱可以买不同的房子,我们把这个买房写成一个抽象类,里面一共有3个动作
在这里插入图片描述我们首先买一个住宅房子,那么这时候 就需要去创建一个住宅房子集成这个抽象类
在这里插入图片描述
当我们有钱的时候,我完全有能力在买一套别墅,这时候我们需要在创建一个别墅
在这里插入图片描述
然后我们在写一个客户端去买这个房子,
在这里插入图片描述
我们会发现当我们再次去买一套新房的时候,只需要创建一个房子的类去集成这个房子的抽象类 去实现他的 找 ,看,付的操作就行了类图如下:
在这里插入图片描述
我们的这里ResidentiaiHource与VillaHource分别集成了这个Hource,
但是有没有更好的方式尼,就是这个看,找.买并不是这个房子的属性,而是人应该去做的事情,这里当某天这个房子需要交税的时候,我们有需要去房子的类里面创建一个交税的方式,但是房子又不能自己交税,所以高度耦合了.

这时候用建造者模式 有改怎么做你?
首先我们想到了 这个房子是一个产品,我们能不能直接去找中介去帮我们照这个放置 我们只需要找到中介 这样的画 无论以后我们需要买什么样子的房子我们都只需要跟中介打交道了 ,

建造者模式一共有4个角色

1:产品:他是被狗奸的复杂对象,包含对各组成部件,具体建造者创建该产品的各个组成部分
2: 抽象建造者模式: 负责定义创建产品对象的各个部件接口。同时定义完成产品对象的接口
3:具体的建造者角色,它实现了Builder接口,实现各个部件的具体构造和装配方法,实现了获取最总复杂产品对象结果的方法
4:指挥者角色:他负责安排复杂对象的建造次序,指挥者面向抽象接口创造者编程,指挥者在construct()狗仔方法中调用建造者对象的部件与装配方法,挖成复杂对象的构建,并通过建造者获取建造的皖战争复杂产品对象

其中的类图如下
在这里插入图片描述

通俗的做法就是
有一个很复杂的对象 ,该对象里有很多复杂的部分 。
这时候我们就应该用建造者模式去创建他
首先 创建一个对象,这个对象就是以后我们需要的对象
将该对象的属性 分别单独拿出来 创建一个抽象类(建造者) 这抽象类里面有创建这个属性的各个方式,并且这个抽象类有一个方法返回的就是该产品。
然后在创建一个具体的建造者,这个建造者实现上面的一个抽象建造者 ,在这个具体的实现里面 依赖这个产品, 创建这个产品的各个部分,在放到这个产品里面的各个属性

最总我们还需要一个指挥者
指挥者负责创建这个负责的对象 并将这个复杂的对象在按照自己想要的放置组装起来,且依赖建造者

建造者模式运行机制
客户端确定具体建造者的类型,并实例化建造者对象,然后通过指挥者类的构造函数或者setter方法将该对象传入指挥者类中,最后在客户端只需要与指挥者惊醒交互,就可以完成复杂产品对象的创建和获取

建造者模式解决的核心问题
建造者模式解决的是复杂对象和组装过程,复杂对象的组成部分和创建过程是固定,所以将固定的组成部分交由抽象建造者的抽象方法定义,将固定的创建过程交由指挥者管理,但是这个复杂对象具有不同的不同的表现形式。则通过不同的具体建造者来实现。表现形式不同,那么建造者就不同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值