gRPC源码剖析-Builder模式

一、Builder模式

1、定义

将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的的表示。

2、适用场景

  • 当创建复杂对象的算法应独立于该对象的组成部分以及它们的装配方式时。

  • 当构造过程必须允许被构造的对象有不同的表示时。

说人话:当你要构造一个对象它的参数大于4个尤其是有些参数是必选有些是可选的就可以考虑使用Builder构造模式。

3、Builder模式最简单一个例子

创建一个Person对象,姓名和性别是必须的,年龄和身高等其他属性是可选的,我们有几种方法来创建,第一种是用需要写很多个重载的构造函数,另外一种直接使用JavaBean的set方法但没有办法约束是否必选。下面是使用Builder模式构造的代码。

gRPC源码剖析-Builder模式_第1张图片

gRPC源码剖析-Builder模式_第2张图片

说明

1、创建一个内部静态类Builder,将对象的属性全部搬一份到Builder中。

2、以必须的属性做为参数创建构造函数

3、创建build方法,将Builder对象作为参数调用主类构造方法

4、主类构造方法以Builder作为参数,然后将Builder的所有属性赋给主类对应的属性。

5、上面代码充斥大量重复的get/set方法,可以用Lombok进行简化,这里先不展开讲了。

4、稍微复杂Builder模式类图

gRPC源码剖析-Builder模式_第3张图片

  • Builder:一个抽象接口,以规范产品对象的各个组成成分的建造。

  • ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。

  • Director:调用具体建造者来创建复杂对象的各个部分。

  • Product:要创建的复杂对象。

二、gRPC中Builder模式使用

在gRPC框架中Builder模式使用的比较多,比如启动gRPC这个代码

Server server = ServerBuilder.forPort(50052).addService(new OrderServiceImpl()).build().start();

就是通过ServerBuilder来构建Server对象。UML类图如下

gRPC源码剖析-Builder模式_第4张图片

另外gRPC编译生成的gprc桩中也大量使用了Builder模式

gRPC源码剖析-Builder模式_第5张图片

关于设计模式的概念对于业务开发人员掌握常用的几种就行(用得最多的是策略模式),但要读懂各底层框架,还是需要对所有设计模式都有所了解,否则很难读得懂源代码,并且好多设计模式加上各种变种容易搞混,似是而非,看似简单掌握起来确不容易,用好更难。

你可能感兴趣的:(Java技术,建造者模式)