Effective Java重点笔记--第二条 遇到构造器具有多
2016-08-30 本文已影响0人
DX5
引入#####
有时,我们会遇到需要设置多个参数的构造器,此时无论是使用静态工厂还是构造器都有局限性,那就是可读性低。如:
<code>
NutritionFacts cocaCola=new NutrutionFacts(240,8,100,0,35,27);
</code>
此时用户难以阅读,必须仔细的查看API文档,这些参数都对应着什么,如果不小心搞错了两个参数的位置,编译器不会报错,但程序运行时会出错,而且难以检查。
使用JavaBean模式#####
调用一个无参的构造器来创建对象,然后调用setter方法来设置每个必要的参数或可选的参数。
NutritionFacts cocaCola=new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100)
cocaCola.setSodium(35);
但是JavaBeans模式自身有很严重的缺点,因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。需要程序员付出额外的努力来确保它的线程安全。
Builder模式#####
不直接生成想要的对象,让用户先调用参数构造器,得到一个builder对象,然后调用无参的build()函数来生成对象。
NutritionFacts cocaCola=new NutritionFacts.Builder(240,8)
.calories(100).sodium(35).carbohydrate(27).build();
Builder模式编码容易,易于阅读。