建造者模式

2019-04-25  本文已影响0人  南小夕

一、前言

建造者模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。

二、定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道。

三、使用场景

如果一个对象有非常复杂的内部结构(很多属性),想把复杂对象的创建和使用分离。

四、与工厂模式的区别

建造者和工厂很相似,它们之间的区别:
1、建造者更注重方法的调用顺序,工厂更注重产品
2、创建产品的力度不同,建造者可以创建一些复杂的产品,由各种复杂的部件组成,而工厂创建出来的都一个样子。
3、另外一个关注点,工厂模式只要把这个对象创建出来就可以了,而建造者不仅要把产品创建出来,还要知道这个产品都是由哪些部件组成的,建造者在某些场景下,可能因为方法调用顺序不一样,而创建出来的对象不一样。
4、当创建一个对象需要很多步骤的时候适合用建造者模式,而当需要一个简单的方法可以简单的创建整个对象时适合用工厂模式。

五、代码实战

现在我们要建造一个视频课程。首先创建一个课程类,有课程的名字、课程所需要的PPT、课程需要的Video、课程的手记还有课程的QA。 屏幕快照 2019-04-25 下午3.15.22.png 接下来创建一个抽象类,课程建造者, 屏幕快照 2019-04-25 下午3.16.04.png 再接下来,要创建一个课程的真正builder, 屏幕快照 2019-04-25 下午3.16.12.png 这个时候引入一个负责跟制作视频课程对接的人,在这称为课程教练, 屏幕快照 2019-04-25 下午3.22.42.png 测试 屏幕快照 2019-04-25 下午3.26.53.png
UML类图 屏幕快照 2019-04-25 下午2.47.23.png 这个应用层Test和抽象的builder、具体的课程都没有关系,但是他和这个课程教练有关系,他来创建这个指挥官,这个指挥官通过组合的方式使用CourseBuilder这个抽象类,而且应用层Test又创建具体的Builder,也就是Test可以创建不同的具体Builder传给课程教练Coach,然后交给课程教练Coach来创建这个课程。
再看一下链式调用,直接创建课程类Course,在这里要使用静态内部类,他就是建造者, 屏幕快照 2019-04-25 下午3.46.58.png 屏幕快照 2019-04-25 下午3.47.19.png 测试 屏幕快照 2019-04-25 下午3.50.45.png UML类图 屏幕快照 2019-04-25 下午3.06.56.png

这个类图相对于上面那个类图就简单很多,这个CourseBuilder作为具体课程的建造者,而应用层只需要负责和具体建造者交互,然后设置具体的属性,最后调用build方法返回具体的实体类。

六、总结

1、优点

(1)封装性好,创建和使用分离;
(2)扩展性好、建造类之间独立、一定程度上解耦。

2、缺点

(1)产生多余的Builder对象;
(2)产品内部发生变化,建造者都要修改,成本较大。

上一篇下一篇

猜你喜欢

热点阅读