单例设计模式(一)
2016-03-07 22:19
246 查看
1、引入
在很多项目中,我们常常需要读取配置文件,也就是说在很多地方都需要创建对象帮我们完成任务。但是,在系统运行期间,系统会存在很多个这样的对象,而且每个对象里面都封装这配置文件的内容,这样会严重浪费内存。实际上,我们只需要一个对象就可以完成我们所需的任务。
2、单例设计模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3、单例模式的结构说明
4、单例模式的实现
懒汉式:马上要使用对象实例的时候才会创建,需要在getInstance方法里去判断。
private static Singleton uniqueInstance = null;
饿汉式:在装载类的时候就创建对象的实例。
private static Singleton uniqueInstance = new Singleton();
懒汉式:
5、单例设计模式中存在问题
①应该根据实际环境选择单例模式
②懒汉式在需要用的时候创建实例,节省了内存空间;饿汉式在类装载的时候就创建了实例节省了运行时间。
③懒汉式是线程不安全的,用的时候需要加同步锁,因为在运行时,有两个线程可能同时访问getInstance方法;饿汉式是线程安全的,类只会装载一次。
④给懒汉式加个同步锁 public static synchronized Singleton getInstance(){},他会降低整个访问速度,而且每次都要判断。可以使用双重检查加锁去解决。
双重检查加锁高效解决单例模式线程安全问题
http://blog.csdn.net/gxc312648465/article/details/50822342
在很多项目中,我们常常需要读取配置文件,也就是说在很多地方都需要创建对象帮我们完成任务。但是,在系统运行期间,系统会存在很多个这样的对象,而且每个对象里面都封装这配置文件的内容,这样会严重浪费内存。实际上,我们只需要一个对象就可以完成我们所需的任务。
2、单例设计模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
3、单例模式的结构说明
4、单例模式的实现
懒汉式:马上要使用对象实例的时候才会创建,需要在getInstance方法里去判断。
private static Singleton uniqueInstance = null;
饿汉式:在装载类的时候就创建对象的实例。
private static Singleton uniqueInstance = new Singleton();
懒汉式:
package singleton; /** * 懒汉式单例设计模式 * @author Administrator * */ public class Singleton { /** * 定义一个变量来存储创建好的类实例 */ private static Singleton uniqueInstance = null; /** * 私有化构造方法,可以在内部控制创建实例的数目 */ private Singleton(){ } public static synchronized Singleton getInstance(){ //判断存储实例的变量是否有值 if(uniqueInstance==null){ //如果没有创建一个 return new Singleton(); } return uniqueInstance; } /** * 单例自己的方法 */ public void singletonOperation(){ System.out.println("Singleton's method......."); } /** * 单例自己的属性 */ private String singletonData; }饿汉式:
package singleton; /** * 饿汉式单例设计模式 * @author Administrator * */ public class Singleton1 { /** * 定义一个变量来存储创建好的类实例,直接在这里创建实例,只创建一次 */ private static Singleton1 uniqueInstance = new Singleton1(); /** * 私有化构造方法,可以在内部控制创建实例的数目 */ private Singleton1(){ } public static Singleton1 getInstance(){ //直接使用已创建好的实例 return uniqueInstance; } /** * 单例自己的方法 */ public void singletonOperation(){ System.out.println("Singleton1's method......."); } /** * 单例自己的属性 */ private String singletonData; }
5、单例设计模式中存在问题
①应该根据实际环境选择单例模式
②懒汉式在需要用的时候创建实例,节省了内存空间;饿汉式在类装载的时候就创建了实例节省了运行时间。
③懒汉式是线程不安全的,用的时候需要加同步锁,因为在运行时,有两个线程可能同时访问getInstance方法;饿汉式是线程安全的,类只会装载一次。
④给懒汉式加个同步锁 public static synchronized Singleton getInstance(){},他会降低整个访问速度,而且每次都要判断。可以使用双重检查加锁去解决。
双重检查加锁高效解决单例模式线程安全问题
http://blog.csdn.net/gxc312648465/article/details/50822342
相关文章推荐
- 浅谈JAVASE单例设计模式
- Java 单例模式详解
- 单例设计_懒汉式(延迟加载)
- 【黑马程序员】Java学习笔记之面向对象高级篇
- 黑马程序员_张孝祥7k面试题_银行调度系统
- 黑马程序员_java04_单例设计模式
- 设计模式01-单例设计模式
- 黑马程序员-单例设计模式
- Java单例设计模式
- 黑马程序员—java面向对象总结(2)—面向对象封装特性
- java学习笔记之——设计模式(一)单例设计模式
- Objective-c 单例设计模式
- java基础-Java之IO流
- 黑马程序员——java小结_007_单例设计模式(懒汉式、饿汉式)
- 黑马程序员 知识点总结-Java单例设计模式
- 黑马程序员_JAVA基础4_线程,同步,单例
- 黑马程序员——Java基础---面向对象(对象的初始化、对象调用成员、单例设计模式)(4)
- 【黑马程序员】Java笔记--单例设计模式
- 设计模式 - 单例设计模式(饱汉式)
- 设计模式 - 单例设计模式(饿汉式)