effective java 1

一.NO.1 考虑用静态工厂方法代替构造函数
静态工厂方法 其实就是一个静态方法,返回的该类的实例。
优点:
1.有自己的名字,方便
2.不用每次调用都创建实例对象,可以定义一个公用的 需要的时候返回就是了。
3.可以返回该类的子类 作为返回值,也可返回非公有类
colletions类中有:
public static Map synchronizedMap(Map map){return new SynchronizedMap(map);}
然后再该类中定义非public类SynchronizedMap
缺点:
1.如果通过静态工厂方法来获得实例,并且类没有公开或者保护的构造函数,那么这个类不能被
继承。
因为子类创建构造函数时要先创建父类的构造函数,父类构造函数私有,继承时直接出错
workeye/src/test/ChildClasstest.java 可证。
2.静态工厂方法跟其他的静态方法区别不大,这样创建的实例谁又知道这个静态方法是创建实例呢?弥补的办法就是: 静态工厂方法名字使用valueOf或者getInstance.
3.个人觉得静态方法 还不能被继承 重写 重载,这个也是一个缺点。

总结:一般来说没有特殊的需求还是用构造函数吧,毕竟这个东西是JDK默认的

发散:
文中提到了工厂方法,工厂方法是设计模式中最简单的一种,有:简单工厂方法,工厂方法,抽象工厂方法三种
见设计模式中具体介绍。


二.试用私有构造函数强化singleton属性
重点:假如该类实现了serializable接口,那应该重写(override)readResolve()方法,否则再反序列化的时候是会产生 一个新的实例,这与singleton相违背了

三.过私有的构造函数强化不可实例化的能力
一部分类只有静态的方法,不能定义为抽象类 又没有必要实例化 那么可以将构造函数搞成private的
和NO.1中一样 这样的类不能被继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值