Effective Java2读书笔记-创建和销毁对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Java2读书笔记-创建和销毁对象相关的知识,希望对你有一定的参考价值。
第3条:用私有构造器或者枚举类型强化Singleton属性
这一条,总体来说,就是讲了一个小技巧,将构造器声明为private,可以实现单例。具体有以下几种实现的方式。
①最传统的单例实现模式,可能有很多变种,核心思想是私有化构造器。
public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton(){}; public static Singleton getInstance(){ return INSTANCE; } public static void main(String[] args) { Singleton.getInstance(); } }
②用枚举类型实现,更加简洁,无偿提供序列化机制,能够绝对防止多次实例化(方法①如果使用序列化仍可生成多个实例),即使是面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛采用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
public enum Singleton { INSTANCE; private String s; public String getS() { return s; } public void setS(String s) { this.s = s; } }
其实enum反编译出来本质上仍然是一个类,也可以有自己的属性和方法。
第4条:用私有构造器强化不可实例化的能力
这里其实也讲的是一个小技巧。比如说,我们平时经常写工具类,工具类不希望被实例化,实例化对它没有任何意义。
第一种解决方案是将工具类做成抽象类,但是这样还是不行,因为这样子类继承后仍然可以实例化。
因此,当一个类不需要被继承也不需要被实例化时,只要让这个类的构造器私有化,就可以达到这个效果。
public class Util { //私有化构造函数,迫使不能实例化 private Util(){}; public static String getStrOfObject(Object o){ //将Object转换为String的方法,略 return ""; } public static String parseDateToYYYYMMDD(Date d){ //将Date转换为2016-03-05这种格式的方法,略 return ""; } }
以上是关于Effective Java2读书笔记-创建和销毁对象的主要内容,如果未能解决你的问题,请参考以下文章