设计模式1______单例模式

单例模式保证了一个类的实例的全局唯一性。

饿汉模式的单例模式:

public class Singleton {
    //饿汉模式
    private Singleton(){}  //构造方法私有

    private static Singleton singleton=new Singleton(); //在类内部创建实例对象

    public static Singleton getSingleton(){ //对外提供一个获得该实例对象的公共接口
        return singleton;
    }

    public static void main(String[] args) {
        Singleton singleton = getSingleton();  //获得实例对象
        Singleton singleton1 = getSingleton(); //获得实例对象
        System.out.println(singleton.hashCode()); //1836019240
        System.out.println(singleton1.hashCode());//1836019240
    }

}

由于饿汉模式是不管程序是否需要该实例对象,都会进行创建,比较浪费资源。由此提出了懒汉模式。即就是:当程序中需要使用该实例对象时,才进行创建该实例对象。但此过程会涉及到多线程并发问题。

懒汉模式的单例模式:

public class Singleton_Lazy_Man {

    //构造方法私有
    private Singleton_Lazy_Man(){}

    //声明一个全局唯一的实例对象,并未直接创建实例对象
    private static Singleton_Lazy_Man singleton_lazy_man;

    //定义向外提供访问的共有接口,同时创建该唯一的实例对象
    public static Singleton_Lazy_Man getSingleton_lazy_man(){
        if(null==singleton_lazy_man){ //实例对象未创建时
            synchronized (Singleton_Lazy_Man.class){
//                if(null==singleton_lazy_man){
//                    singleton_lazy_man=new Singleton_Lazy_Man();
//                }
                singleton_lazy_man=new Singleton_Lazy_Man();
            }
        }
        return singleton_lazy_man;
    }

    public static void main(String[] args) {
        Singleton_Lazy_Man singleton_lazy_man = getSingleton_lazy_man();
        Singleton_Lazy_Man singleton_lazy_man1 = getSingleton_lazy_man();
        //打印发现 hashCode码是相同的
        System.out.println(singleton_lazy_man.hashCode());
        System.out.println(singleton_lazy_man1.hashCode());
    }

}

lk

猜你喜欢

转载自www.cnblogs.com/xbfchder/p/11450671.html
今日推荐