Java实践之路(设计模式)——单例模式(Singleton)(更新)
来源:互联网 发布:姜思达人工智能辩论词 编辑:程序博客网 时间:2024/05/06 23:43
背景
以前写过单例模式的文章(http://blog.csdn.net/cyxlzzs/article/details/7078548),这里根据最新的理解重新写一下单例模式的设计,主要写两种我认为最好的实现方式
单例模式之内部类实现
这里直接先上代码,后面总结
class RepositoryClass{ private int num; //数据 private static class RepositoryClassHolder{ private static RepositoryClass instance = new RepositoryClass(); } private RepositoryClass(){ } public static RepositoryClass getInstance(){ return RepositoryClassHolder.instance; } public void incrNum(){ num++; } public int getNum(){ return this.num; }}
这里定义了一个数据仓库类,里面需要维护一个数量的字段num
单例模式之枚举实现
也是先上代码
enum RepositoryEnum{ instance; //单例对象 private int num; //数据 private RepositoryEnum(){} public void incrNum(){ num++; } public int getNum(){ return this.num; }}
该枚举的作用和上面的仓库类是一样的
测试代码
public static void main(String[] args){ RepositoryClass repositoryClass = RepositoryClass.getInstance(); println(repositoryClass.getNum()); repositoryClass.incrNum(); println(repositoryClass.getNum()); RepositoryClass repositoryClass1 = RepositoryClass.getInstance(); println(repositoryClass1.getNum()); repositoryClass1.incrNum(); println(repositoryClass.getNum()); println(repositoryClass1.getNum()); System.out.println("==============="); println(RepositoryEnum.instance.getNum()); RepositoryEnum.instance.incrNum(); println(RepositoryEnum.instance.getNum()); } public static void println(int num){ System.out.println("num:"+num); }
输出结果
num:0num:1num:1num:2num:2===============num:0num:1
总结对比
1、内部类实现的单例模式优点在于:懒加载,效率高,线程安全;缺点在于有些机制还是会破坏单例,比如序列化,反射和clone,当然可以有相应的机制来防止这些,可以在网上查一下解决的方法
2、枚举实现是jdk版本1.5以上才有的,但这种方式是实现单例模式的最好方式,推荐使用
0 0
- Java实践之路(设计模式)——单例模式(Singleton)(更新)
- Java实践之路(设计模式)——单例模式(Singleton)
- 设计模式之—单例模式(Singleton)-Java实现
- 设计模式之—单例模式(Singleton)-Java实现
- Java设计模式—singleton 单例
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- playmaker制作玩家跳跃
- 解决scrollview中内容改变后自动滑动到底部的问题
- Python接口测试之unittest框架
- 三种不错的开源loading效果
- 数组表示邻接表
- Java实践之路(设计模式)——单例模式(Singleton)(更新)
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- 新技能:Markdown中使用LaTeX
- 仿支付宝滑块验证码效果的前端实现
- hashmap 遍历 java
- 欢迎使用CSDN-markdown编辑器
- Eclipse下通过Maven的Jetty插件运行Web工程的配置,包括启动https
- 多线程、进程(二Interlocked)
- 关于.9图片Eclipse上移植到AndroidStudio上的问题解决方案