您的位置:首页 > 其它

单例设计模式(一)

2016-03-07 22:19 246 查看
1、引入
    在很多项目中,我们常常需要读取配置文件,也就是说在很多地方都需要创建对象帮我们完成任务。但是,在系统运行期间,系统会存在很多个这样的对象,而且每个对象里面都封装这配置文件的内容,这样会严重浪费内存。实际上,我们只需要一个对象就可以完成我们所需的任务。
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单例设计模式