23种设计模式-单例模式
来源:互联网 发布:蓝牙虚拟串口软件 编辑:程序博客网 时间:2024/04/30 13:34
23种设计模式-单例模式
单例模式是23中设计模式中最简单的设计模式,也属于创建模式。顾名思义,就是为了保证该类的实例只能有一个。单例模式又分懒汉式,饿汉式,双重检测锁模式,枚举式,静态内部类式
下面逐一介绍。
饿汉式:
/**
* 测试饿汉式:天然的线程安全加载效率高
*
* @author Victor Djm
*
*/
public classSingletonDemo1 {
private static SingletonDemo1 instance =new SingletonDemo1();
private SingletonDemo1() {
}// 私有化构造器
public static SingletonDemo1getSingletonDemo1() {
returninstance;
}
}
总结:类加载时就创建该实例,效率高,但不支持懒加载。可能在不需要的情况下也创建
懒汉式:
/**
* 懒汉式:线程安全,加载效率低,使用时才去创建实例保证不浪费资源
*
* @author Administrator
*
*/
public classSingletonDemo2 {
private static SingletonDemo2 instance;
private SingletonDemo2() {
}
// 加上线程锁可以保证不会出现并发访问的问题如果不加可能会出现多次创建实例,导致违背单例模式
public static synchronized SingletonDemo2getSingletonDemo2() {
if (instance ==null) {
instance =new SingletonDemo2();
}
returninstance;
}
}
总结:懒汉式在第一次调用的时候才去创建对象。效率较低。但支持懒加载,不会创建多余的对象
/**
* 双重检查锁实现单例模式
* @author
*
*/
public classSingletonDemo3 {
privatestaticSingletonDemo3 instance =null;
publicstaticSingletonDemo3 getInstance() {
if(instance ==null){
SingletonDemo3 sc;
synchronized(SingletonDemo3.class){
sc = instance;
if (sc ==null) {
synchronized (SingletonDemo3.class) {
if(sc ==null) {
sc = new SingletonDemo3();
}
}
instance = sc;
}
}
}
returninstance;
}
privateSingletonDemo3() {
}
}
这种方式效率高,也支持懒加载,但是由于jvm底层不支持这种模式,最好不要使用。
枚举式:
/**
* 枚举式:天然单例
* @author Administrator
*
*/
public enumSingletonDemo4 {
Instance;
public SingletonDemo4getInstance() {
return Instance;
}
}
枚举式是天然单例的模式,效率高,基于jvm底层实现,天然单例
/***
* 静态内部类模式,
* @author Administrator
*
*/
public classSingletonDemo5 {
//通过静态内部类实现单例
public static class Instance {
private static SingletonDemo5 instance =new SingletonDemo5();
}
private SingletonDemo5() {
}
public static SingletonDemo5getInstance() {
return Instance.instance;
}
}
静态内部类式线程安全调用效率高,并且实现了延时加载。
总结:如果要使用懒加载,静态内部类模式好于懒汉式
如果不使用懒加载,枚举式好于饿汉式
不推荐使用双重检测锁模式。
- 23种设计模式-单例模式
- 23种设计模式~单例模式
- 23种设计模式-单例模式
- 23种设计模式-----单例模式
- 23种设计模式-单例模式
- 23种设计模式-单例模式
- 【23种设计模式】创建型模式 > 单例模式
- 23种设计模式 之单例设计模式
- 23种设计模式 - 单例设计模式
- 23中设计模式单例模式
- 设计模式 1-23 单例模式
- 设计模式 1-23 单例模式
- java23种设计模式-----单例模式
- 23种设计模式之 单例
- 23种设计模式-----单例(singleton)
- 23种设计模式学习之东拼西凑-------单例模式
- 23种设计模式之单例模式(Singleton)
- 23种设计模式(1):单例模式
- UE4 C++碰撞检测(OnHit)
- 关于单位集合信息
- 在Unity中使用多个相机
- RESTful 架构风格概述
- The condition code flags
- 23种设计模式-单例模式
- (HDU
- win8删除链接过的WiFi信息
- QTableView自定义模型和委托
- 2017 Multi-University Training Contest
- Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载
- CentOS7 MySQL5.7 实现主从同步
- MyBatis插入语句获取主键id
- 监控测试 ——SAR工具使用方法