【effective java】2.遇到多个构造器参数时要考虑用构建器



1.why
a)目前我们学习了构建一个对象有三种实现方式,1是构造器,2是静态工厂,3是java bean模式
(1)构造器的缺点是如果对象每新增一个成员变量,那么对应构造器就要加一个参数或者重叠构造器,而当我们使用构造器实例化对象的时候还要仔细对一下参数,避免传错,这样就的代码不容易阅读和开发。
(2)静态工程跟构造器一样,不能很好的支持扩展大量参数
(3)java bean构造对象,实例化对象后通过setter设置对象的属性,可读性虽然高,缺点1 构造过程中总是通过obj.setXXX,那么可能存在obj不一致的情况,缺点2类无法仅仅通过检验构造器参数的有效性来保证一致性!缺点3对象的不一致会导致失败,JavaBeans模式阻止了把类做为不可变的可能,需要程序员做额外努力来保证它线程安全。

b)-->升级 构建器
(1)可以检验参数,验证完之后才会build对象
(2)构建对象比较易于创建与阅读,线程安全
(3)可以有多个可变参数,每新增一个参数只要在在一个方法就可以了

2.how
在需要实例化的对象中新增一个内部类Builder,该内部类就是构建器

3.when
对象未来可能还要添加参数,并且有很多可选参数的时候可使用构建器

4.where
构建器在安卓中应用比较广泛
Notification.Builder myBuilder = new Notification.Builder(context);
myBuilder.setContentTitle(context.getString(R.string.app_name))
.setContentText(content)
.setTicker("您收到新的 " + context.getString(R.string.app_name) + " 消息")
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true)//点击后取消
.setWhen(System.currentTimeMillis())//设置通知时间
.setPriority(Notification.PRIORITY_HIGH)//高优先级
.setContentIntent(pi); //3.关联PendingIntent
Notification mNotification= myBuilder.build();

猜你喜欢

转载自blog.csdn.net/charjay_lin/article/details/80947322