单例模式

设计模式之单例模式篇

十九世纪八十年代,中国开始了计划生育。而单例模式也是保证一个类只有一个实例,提供一个访问该实例的全局变量。和计划生育是不是也异曲同工之妙呢? 单例模式常见的场景有Windows Task Manager(任务管理器)、Windows Recycle Bin(回收站)、一般数据库连接池使用的单例模式、在读取配置文件时也常采用单例模式。

优点和实现

优点:单例模式只生成一个实例,减少了系统性能开销;可以在系统设置全局访问点,优化环共享资源访问。
实现
1. 饿汉式
2. 懒汉式
3. 双重检测琐式
4. 静态内部类式
5. 枚举;

*饿汉式 *

饿汉式线程安全 ,调用效率高,但是不能延时加载,在类装载时 就加载了对象。

package com.xiaoxin.shejimushi;

/**
 * 单例模式@饿汉式
 * @author xiaoxin 
 * hunanxiaoxin@126.com
 */

public class SingLetonDemo1 {
	//类装载时 ,即加载对象(不能延时加载)。
	private static SingLetonDemo1 instance = new SingLetonDemo1();
	
	//构造方法私有化
	private SingLetonDemo1 (){
		
	}
	
	//提供一个getInstance方法。该方法没有同步 调用效率高。
	public static SingLetonDemo1 getInstance(){
		return instance;
	}
}

懒汉式

懒汉式在需要时才创建对象,实现了延时加载,同样线程是安全的,但是调用效率不高。

  • 单例模式@懒汉式
  • @author xiaoxin
  • hunanxiaoxin@126.com
    */

public class SingLetonDemo2 {

private static  SingLetonDemo2 instance;

//构造方法私有化
private SingLetonDemo2 (){
	
}

//提供一个getInstance方法。synchronized实现同步,每次创建即需同步,所以调用效率不高。
public static synchronized SingLetonDemo2 getInstance(){
	if(instance==null){
		instance = new SingLetonDemo2(); //在需要用时,再创建对象 实现延时加载 。
	}
	return instance;
	}

}

双重检测锁式

一般不建议使用,了解。(本人第一次写博客,希望各位提供意见,我将仔细聆听)
在这里插入代码片
/
*

  • 单例模式@双重检测琐式
  • @author xiaoxin
  • hunanxiaoxin@126.com
    */

public class SingLetonDemo3 {
private static SingLetonDemo3 instance = null;
public static SingLetonDemo3 getInstance(){
if(instance == null){
SingLetonDemo3 s;
synchronized (SingLetonDemo3.class){
s = instance;
if(s == null){
synchronized (SingLetonDemo3.class){
if(s == null){
s = new SingLetonDemo3();
}
}
instance = s;
}
}
}
return instance;
}
private SingLetonDemo3 (){

}

}

静态内部类

可以延迟加载,在需要时调用SingLetonInstance.instance

/**
 * 单例模式@静态内部类
 * @author xiaoxin 
 * hunanxiaoxin@126.com
 */

public class SingLetonDemo4 {
	
	private static class SingLetonInstance{
		
		private static final SingLetonDemo4 instance = new SingLetonDemo4();
	}
	
	private SingLetonDemo4(){
		
	}
	
	public static  SingLetonDemo4 getInstance(){
		
		return SingLetonInstance.instance;
	}	
}

枚举

实现简单,枚举本身就是单例模式,不可以延迟加载。

/**
 * 单例模式@枚举
 * @author xiaoxin 
 * hunanxiaoxin@126.com
 */

public enum SingLetonDemo5 {
	
	instance;
	
	public void singletonOpration(){
	
	}
}

总结

第一次写博客有错误的地方勿怪。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值