3、用私有构造器或者枚举类型强化SIngleton属性
2016-06-07 22:29
369 查看
结论
单元素的枚举类型已经成为实现Singleton的最佳方法Singleton模式
常见的Singleton有两种方式,第一种:public class Elvis { //被定义为final的,不可改变的 public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } // This code would normally appear outside the class! public static void main(String[] args) { Elvis elvis = Elvis.INSTANCE; elvis.leaveTheBuilding(); } }
第二种方式:
public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() { } //定义为静态方法 public static Elvis getInstance() { return INSTANCE; } public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } // This code would normally appear outside the class! public static void main(String[] args) { Elvis elvis = Elvis.getInstance(); elvis.leaveTheBuilding(); } }
让Singleton变成可序列化的
为了让反序列化的时候只创建一个对象public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } private Object readResolve() { // Return the one true Elvis and let the garbage collector // take care of the Elvis impersonator. return INSTANCE; } // This code would normally appear outside the class! public static void main(String[] args) { Elvis elvis = Elvis.INSTANCE; elvis.leaveTheBuilding(); } }
使用枚举实现单例模式
无偿提供了序列化的机制,绝对防止多次实例化public enum Elvis { INSTANCE; public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } // This code would normally appear outside the class! public static void main(String[] args) { Elvis elvis = Elvis.INSTANCE; elvis.leaveTheBuilding(); } }
相关文章推荐
- QSignalMapper简介
- MySQL索引简单总结
- Android N 对Doze(打盹)模式优化
- 219.[Leetcode]Contains Duplicate II
- 用一行简单的代码就能加速IE运行脚本的速度
- 第15周阅读程序(1)
- 使用spring mvc前台获取后台返回的List
- 设计模式——策略模式
- HDU 1426 - Sudoku Killer
- CodeForces 26D Tickets(概率)
- OpenWRT上判断客户端在线个数
- mybatis的动态sql之if test用法
- UVALive 2889 (数学)
- java应用cpu过高
- javaweb学习总结(四十四)——监听器(Listener)学习
- 94. Binary Tree Inorder Traversal
- Android Studio推荐插件
- 打印frame
- java 8之Lambda Expressions 解说
- war 宽度变窄