Java23种设计模式——5.创建型模式之建造者模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  创建型模式  中的  建造者模式  !

建造者模式:

这个是创建型模式的最后一个模式,建造者模式,我们先来认识一下它

建造者模式定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

这个定义需要大家多读几遍,不是那么容易理解。

这里我来给大家举个栗子,大家好理解。我们呢,现在有一个汽车对象,我们可以知道啊,汽车这个东西是很复杂的,里面有车轮子、发动机、电瓶、车架子......,很多很多啊,我们现在要实例化一下这个汽车对象,其实也是可以的,但是,成本、技术难度,太大太大。所以想要一次性直接实例化是不可选取的,我们可以这样去做,将汽车这个对象进行分解,单独去生产车轮子,单独去生产发动机这些,最后一组装,OK,汽车这个对象就完成了。而且,我们这个汽车还能做更换,好比现在车轮子是用的木头的,我们呢可以将车轮子给他换成橡胶的。

建造者模式的优点和好处:

优点:

1. 各个具体的建造者相互独立,有利于系统的扩展。

2. 客户端不必知道产品内部组成的细节,便于控制细节风险。

好处:

建造者模式呢,将不变和变分离,也就是汽车本身是不变的,变得是车轮子,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

与工厂模式的区别:

建造者模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂模式更注重零部件的创建过程,但两者可以结合使用。

建造者模式的实现:

我们说这个实现之前,还需要说一个,就是建造者模式的组成。

建造者模式由产品、抽象建造者、具体建造者、指挥者这四个部分组成,然后我们来说一下这四个部分指代什么东西

首先是产品,这个好理解,就是我们上面说的内个汽车。

其次是抽象建造者,这个就是一个接口,用来定义需要制造啥,但是不需要它去实现,具体的实现是由具体建造者去实现。

具体建造者,这个其实就不说了,就是实现刚刚抽闲建造者这个接口,然后去做具体的实现。

最后就是这个指挥者,指挥者就是用来调用具体建造者的,先建立啥,再建立啥,不然人家车轮子、发动机都造好了,发现没有车架子不就尴尬了?

 

下面我们来用Java的代码来说一下上面的这个造汽车。

1. 我们先来创建一个Car,这个就是上面的复杂对象。然后里面现有很多零部件,比如说车轮子,发动机啥的。我们就不把他们定义成对象了,我就用String类型假装一下。

2. 我们知道了这个汽车的组成之后,我们再来创建 抽象建造者。

这里需要注意的是,我们这个汽车这个对象,外界只能通过getCar()这个方法获取,不能随便去拿。

原因很简单,造一个汽车是很复杂的,我们不需要它知道这个造汽车多复杂,你如果需要调用我的方法获取就好了。

我们把造这些车轮啊啥的方法都设定成抽象的,由具体建造者去实现。

3. 有了抽象建造者之后,我们就需要具体建造者去实现了。这里我们来创建一个具体建造者。

然后我们来给每一个方法补充具体的内容。

4. 有了产品,有了抽象建造和,还有了具体建造者之后,我们还差一个指挥者,我们来创建一下指挥者。

指挥者呢,我们需要去指挥怎么去创建,这里我们来写一下

我们定义一个carBuilder,因为我们需要去调用它,然后呢,我们用它来去建造这些个车轮子啊啥的,最后,我们返回这个造好的车。

5. 最后,我们来写一个测试类,我们来使用一下建造者模式

然后我们来运行一下

... 话说,这个不是我们想让他输出的,我们来重写一下Car的toString()方法。然后再运行

到这里为止,我们的建造者模式就学习完了,然后23种设计模式当中的创建型模式也就学习完成了,希望大家好好学习。

 

ps:上方二维码是我个人的公众号,最近刚开不久,我每个月都会更新一些活动,希望大家可以积极参加,活动详情可以关注公众号之后,回复“活动”二字进行查看,参加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值