2.遇到多个构造器参数时要考虑用构建器(Builder模式)

创建对象的三种模式:

静态工厂和构造器模式:所有参数传递到构造函数中,不能很好地扩展到大量的可选参数。

JavaBean模式:调用无参数构造器,然后调用setter方法来设置每个必要的参数以及可选参数。

Builder模式:客户端用参数调用构造器(或静态工厂方法),得到一个builder对象,客户端在builder对象上调用类似setter方法。

一、构造器模式:

2.遇到多个构造器参数时要考虑用构建器(Builder模式)_第1张图片

本不想设置的参数,但还是得为它们传值。

二、JavaBean模式:

调用一个无参数构造器,然后调用setter方法来设置每个必要的参数以及可选参数。

2.遇到多个构造器参数时要考虑用构建器(Builder模式)_第2张图片

解决构造器模式可选参数问题。

缺点构造过程中被划分到了几个调用中,可能处于不一致的状态。无法通过检验构造器参数的有效性来保证一致性。

无法将类设置为不可变(即final类型),所以要去确保线程安全

三、Builder模式:

2.遇到多个构造器参数时要考虑用构建器(Builder模式)_第3张图片

在NutritionFacts中通过builder对象来初始化参数:

2.遇到多个构造器参数时要考虑用构建器(Builder模式)_第4张图片

调用方法:

NutritionFacts cocaCola=newNutritionFacts.Builder(240,8).

calories(100).sodium(35).carbohydrate(27).build();

能保证安全性(设置参数为final类型),保证可读性。

缺点:必须先创建它的构建器(即Builder对象)。注重性能的情况下,构建器开销是个问题

后记:builder模式应用在javaBean对象也要看场合,不是所有的javaBean对象都适合用builder模式来构建,比如在社交类APP开发中,一个用户对象的信息通常是可变的,比如它的网名,性别,个人签名等等信息,而一些需要认证的信息比如个人姓名等,一旦设置就不允许随便更改的,所以这样的话一个javaBean对象就可能包含着可变和不可变的对象,具体情况需要具体分析。

https://www.jianshu.com/p/03dc33fd11cb

你可能感兴趣的:(2.遇到多个构造器参数时要考虑用构建器(Builder模式))