码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2017-12-16 11:04:04      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:单例对象   pac   依赖   数据表   解决   访问   使用   stat   instance   

核心作用:

  保证一个类只有一个对象,并且提供一个访问该实例的全局访问点。

常见应用场景:

  1、windows中的任务管理器就是典型的单例模式

  2、windows回收站也是单例模式

  3、项目中读取配置文件的类也是单例模式

  4、日志管理

  。。。

单例模式的优点:

  1、由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其它依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决

  2、单例模式可以设置全局访问点,优化共享资源的访问,例如可以设计一个单例类,负责所有数据表的映射处理

 

常见的五种单例模式实现方式:

  主要:

    饿汉式:(线程安全,调用效率高。但是不能延时加载)

    懒汉式:(线程不安全,调用效率不高。但是可以延时加载)

  其他:

    双重检测锁式(由于JVM底层内部模型原因,偶尔会出现问题,不建议使用)

    静态内部类式(线程安全、调用效率高。但是可以延时加载)

    枚举单例(线程安全、调用效率高。不能延时加载)

饿汉式

package com.pattern.singleton;

/**
 * 测试饿汉单例模式
 */
public class SingLetonDemo1 {

	//类初始化立即加载,所以叫饿汉式
	//类初始化时,立即加载这个对象(不能延时加载),加载类时,天然的是线程安全的
	private final static SingLetonDemo1 singLetonDemo1 = new SingLetonDemo1();
	
	private SingLetonDemo1() {
	}
	
	//方法没有同步,调用效率高
	public static SingLetonDemo1 getInstance() {
		return singLetonDemo1;
	}
	
}

懒汉式  

package com.pattern.singleton;

/**
 * 测试懒汉单例模式
 */
public class SingLetonDemo2 {
	
	//类初始化时,不初始化这个对象(延时加载,真正用的时候加载)
	private static SingLetonDemo2 singLetonDemo2 = null;
	
	private SingLetonDemo2() {
	}
	
	//方法同步调用效率低
	public static synchronized SingLetonDemo2 getInstance() {
		if(singLetonDemo2 == null) {
			singLetonDemo2 = new SingLetonDemo2();
		}
		return singLetonDemo2;
	}

}

  

 

单例模式

标签:单例对象   pac   依赖   数据表   解决   访问   使用   stat   instance   

原文地址:http://www.cnblogs.com/zhaojianhua/p/8045336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!