博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

java设计模式之单例模式

设计模式(Design Pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。

使用设计模式的目的:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。

单例模式:保证整个应用中某个实例有且只有一个。

单例模式的分类:

  1. 饿汉模式
  2. 懒汉模式

一、饿汉模式

/**
 * 单例模式Singleton
 * 应用场合:有些对象只需要一个就足够了
 * 作用:保证整个应用程序中某个实例有且只有一个
 * 类型:饿汉模式
 * */
public class Singleton {
    //1.将构造方法私有化,不允许外部直接创建对象
    private Singleton(){
    }
    
    //2.创建类的唯一实例,使用private static修饰
    private static Singleton instance = new Singleton();
    
    //3.提供一个用于获取实例的方法,使用public static修饰
    public static Singleton getInstance(){
        return instance;
    }
}

饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。

二、懒汉模式

/**
 * 单例模式Singleton
 * 应用场合:有些对象只需要一个就足够了
 * 作用:保证整个应用程序中某个实例有且只有一个
 * 类型:懒汉模式
 * */
public class Singleton {
    //1.将构造方法私有化,不允许外部直接创建对象
    private Singleton(){
    }
    
    //2.声明类的唯一实例,使用private static修饰
    private static Singleton instance;
    
    //3.提供一个用于获取实例的方法,使用public static修饰
    public static Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}

懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。主要原因是因为在多线程中,当第一个线程进入获取实例的方法,还未开始实例化对象时被中断,第二个线程进来后发现仍然没有实例,所以会创建实例,而之后第一个线程重新进来时,依旧会创建一个线程,这样就不能保证创建唯一实例了,所以是线程不安全的,解决的办法就是在获取实例的方法内加锁。

 

posted @ 2018-08-31 10:34  疯狂打码  阅读(189)  评论(0编辑  收藏  举报