设计模式(1)-单例模式Singleton
2015-10-10 10:48
218 查看
单例模式的四种实现方式:
1、饿汉模式
public class Singleton2{ //饿汉模式,声明时不创建实例对象 public static Singleton2 instance; //单类模式的构造方法必须为private,以避免通过构造方法创建对象实例, //并且必须显示声明构造方法,以防止使用默认构造方法 private Singleton2(){} //单类模式必须对外提供获取实例对象的方法,延迟初始化的单类模式必须使用synchronized同步关键字,否则多线程情况下很容易产生多个实例对象 public static synchronized Singleton2 geInstance(){ //延迟初始化,只有当第一次使用时才创建对象实例 if(instance == null){ return new Singleton2(); } return instance; } }
2、饱汉模式
public class Singleton1{ //饱汉模式,声明时就创建实例对象 public static final Singleton1 instance = new Singleton1(); //单类模式的构造方法必须为private,以避免通过构造方法创建对象实例, //并且必须显示声明构造方法,以防止使用默认构造方法 private Singleton1(){} //单类模式必须对外提供获取实例对象的方法 public static Singleton1 geInstance(){ return instance; } }
3、使用枚举
枚举可以保证真个程序生命周期中只有一个实例对象存在,同时还避免了常规Singleton单类模式private构造方法被反射调用和序列化问题(枚举提供了序列化保证机制,确保多次序列化和反序列化不会创建多个实例对象)。
public enum Singleton4{ INSTANCE{ public void doSomething(){ …… } }; public abstract void doSomething(); }
4】静态内部类的实现方式:
public class Singleton3 { /** * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载 */ private static class SingletonHolder{ /** * 静态初始化器,由JVM来保证线程安全 */ private static Singleton3 instance = new Singleton3(); } /** * 私有化构造方法 */ private Singleton3(){ } public static Singleton3 getInstance(){ return SingletonHolder.instance; } }
相关文章推荐
- CSS中margin和padding的区别
- JSP&Servlet学习笔记(一)
- web_save_timestamp_param获取时间戳函数介绍
- tomcat+jdk的keytool生成证书 配置https
- Number()数据类型转换
- Native App, Hybrid App, Web App对比
- Ganglia系列(一)安装
- TCP、UDP、IP 协议分析
- 进程间同步---system v ipc 对象信号灯集
- Linux进程与线程之一
- POJ 1458 Common Subsequence (暴力枚举)
- Linux文件I/O之二
- TDPSQL安装小结
- linux 静态库、共享库
- Linux文件I/O之一
- linux 标准IO缓冲机制探究
- 标准I/O相关函数
- 文件I/O相关函数
- C语言试卷习题
- Golang vim开发环境设置