单例模式(懒汉,饿汉)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式(懒汉,饿汉)相关的知识,希望对你有一定的参考价值。

Java中的单例模式一般分为懒汉模式和饿汉模式,懒汉模式只有用得到的时候对象才初始化,饿汉模式无论用得到与否,都先初始化。

懒汉模式在运行的时候获取对象比较慢(因为类加载时并没有创建对象实例),但是加载类的时候比较快(因为此时不创建对象实例),饿汉模式是在运行的时候获取对象快(因为加载类时就创建了实例对象),加载类的时候慢(此时还需要创建实例对象)。

单例模式的应用场合,有些对象只需要一个的时候。

作用:保证整个应用程序中某个实例有且只有一个。

饿汉模式:

class SingletonDemo{
    /**
    *单例饿汉模式
    */

    //在单例类的内部声明一个自己本身的对象,并且初始化
    private static SingletonDemo s = new SingletonDemo();
    //私有化构造器
    private SingletonDemo(){
        
        }
        
    //获得单例的对象,必须static,不然无法调用该方法
    public static SingletonDemo getSingletonDemo(){
        return s;
        }
    public void eat(){
        System.out.println("在吃饭");
        }
    
    }
    
class TestSingletonDemo{
    public static void main(String[] args){
        //使用类名调用get方法得到在单例类内部所创建的对象
        /**使用类名时要确保get方法是static类方法,才可以使用类名调用方法,
        *使用类名调用方法,那就要调用类属性,也要是static修饰的属性
        */
        SingletonDemo s1 = SingletonDemo.getSingletonDemo();
        s1.eat();
        System.out.println(s1);
        
        SingletonDemo s2 = SingletonDemo.getSingletonDemo();
        s2.eat();
        System.out.println(s2);
        
        SingletonDemo s3 = SingletonDemo.getSingletonDemo();
        s3.eat();
        System.out.println(s3);
        
        }
    }

单例懒汉模式:

class Singleton{
    /**
    *懒汉模式
    */
    //将构造方法私有化,不允许外面直接创建对象
     private Singleton(){
         }
    //声明类的唯一对象,使用private static
    private static Singleton s;
    //给外部提供一个可以获得对象的方法,使用public static
    public static Singleton getSingleton(){
        if(s == null){
            s = new Singleton();
            }
        return s;
        }
}


class TestSingle{
    public static void main(String [] args){
        Singleton s = Singleton.getSingleton();
        System.out.println(s);
        
        
        Singleton s1 = Singleton.getSingleton();
        System.out.println(s1);
        
        
        Singleton s2 = Singleton.getSingleton();
        System.out.println(s2);
        
        
    }
    
}

 

以上是关于单例模式(懒汉,饿汉)的主要内容,如果未能解决你的问题,请参考以下文章

单例模式 (饿汉懒汉)

手写单例模式(饿汉和饱汉模式)和工厂模式

Java设计模式--单例模式(代码详解懒汉饿汉模式)

单例模式,饿汉与懒汉

多线程 实现单例模式 ( 饿汉懒汉 ) 实现线程安全的单例模式 (双重效验锁)

单例模式(饿汉方式懒汉方式)