设计模式(1)-单例模式Singleton
来源:互联网 发布:淘宝商家 编辑:程序博客网 时间:2024/05/17 01:43
单例模式的四种实现方式:
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; } }
0 0
- 设计模式(1)-单例模式Singleton
- 单例设计模式(Singleton)
- 单例设计模式Singleton
- singleton(单例设计模式)
- 单例设计模式(Singleton)
- Singleton 单例设计模式
- 单例设计模式Singleton
- Singleton 单例设计模式
- Singleton单例设计模式
- 单例(Singleton)设计模式
- 设计模式-Singleton单例
- 单例(Singleton)设计模式
- 设计模式(2)-单例模式(Singleton)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式 - Singleton Pattern(单例模式)
- 设计模式---单例模式(singleton)
- 设计模式(4)-单例模式(Singleton)
- 设计模式 – 单例模式(Singleton)
- ELF文件和BIN文件
- NAND Flash和NOR Flash的区别
- SRAM、DRAM;SDRAM、DDRSDRAM(DDR)、RDRAM;SARAM、DARAM的区别
- Tftp服务器_NFS服务器_Samba服务
- 对u-boot中的".balignl 16,0xdeadbeef"的理解
- 设计模式(1)-单例模式Singleton
- 反汇编代码格式
- 电影票api 电影信息查询调用代码返回示例
- linux中container_of(ptr, type, member)
- swift下取消横屏
- 并发和并行
- Linux内核驱动fsync机制实现图解
- 关于linux mysql启动错误问题
- 史上最经典的Linux内核学习方法论