创建对象的三种模式:
静态工厂和构造器模式:所有参数传递到构造函数中,不能很好地扩展到大量的可选参数。
JavaBean模式:调用无参数构造器,然后调用setter方法来设置每个必要的参数以及可选参数。
Builder模式:客户端用参数调用构造器(或静态工厂方法),得到一个builder对象,客户端在builder对象上调用类似setter方法。
一、构造器模式:
本不想设置的参数,但还是得为它们传值。
二、JavaBean模式:
调用一个无参数构造器,然后调用setter方法来设置每个必要的参数以及可选参数。
解决构造器模式可选参数问题。
缺点:构造过程中被划分到了几个调用中,可能处于不一致的状态。无法通过检验构造器参数的有效性来保证一致性。
无法将类设置为不可变(即final类型),所以要去确保线程安全。
三、Builder模式:
在NutritionFacts中通过builder对象来初始化参数:
调用方法:
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