建造者模式详解(4大角色优点及应用实例)

建造者模式详解(4大角色优点及应用实例)-mikechen

建造者模式定义

建造者模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成不同复杂对象。

 

建造者模式角色

建造者模式包含以下四个角色,如下图所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

1.产品角色(Product)

图上最右侧绿色部分:表示产品Product角色,表示具体需要生成的类对象。

 

2.抽象建造者(Builder)

图上最上面红色部分:表示产品角色抽象建造者(Builder),它是一个包含创建产品各个子部件的抽象方法的接口。

 

3.具体建造者(Concrete Builder)

图上下方浅黄色部分:表示具体建造者(Concrete Builder),用于实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。

 

4.指挥者(Director)

指挥者:它调用建造者对象中的部件构造与装配方法,完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

 

建造者模式的优缺点

1.优点

  • 封装性好,创建和使用分离,无需修改原有代码,符合“开闭原则”;
  • 建产品本身与创建过程解耦,可以使用相同的创建过程得到不同的产品;

2.缺点

  • 建造者模式创造出来的产品,其组成部分基本相同,如果产品之间的差异较大,则不适用这个模式;
  • 若产品内部发生变化,建造者都要修改,成本较大,若内部变化复杂,会有很多的建造类;

与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

 

建造者模式实现示例

1.定义 产品角色

Product包含多个组成部件的复杂对象:partA、partB、partC,如下所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

2.定义抽象建造者

抽象建造者:包含创建产品各个子部件的抽象方法,buildPartA、buildPartB、buildPartC。

如下所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

3.定义具体建造者

具体建造者:实现了抽象建造者接口,如下所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

 

4.定义指挥者

指挥者:调用建造者中的方法完成复杂对象的创建,如下所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

5.客户端实现

下面是建造者模式的整个调用实现,如下所示:

建造者模式详解(4大角色优点及应用实例)-mikechen

 

建造者模式应用场景

  • 建造者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
  • 比如创建一个旅游产品,旅游产品里面有机票,酒店,门票,保险等等,行程定制师可以根据你的要求,组装成一个你满意的产品。
  • 生活中的应用场景,比如汽车中的方向盘,发动机,车架,轮胎等等部件也是多种多样的。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法