Effective Java重点笔记--第二条 遇到构造器具有多个参数时要考虑使用构建器

引入#####

有时,我们会遇到需要设置多个参数的构造器,此时无论是使用静态工厂还是构造器都有局限性,那就是可读性低。如:
<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模式编码容易,易于阅读。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容