java学习之单例模式(饿汉式与懒汉式)

Posted dreamy

tags:

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

---恢复内容开始---

设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象

 

想要保证对象唯一。

1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象

2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象

3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式

 

这三部分用代码体现:

1.将构造函数私有化

2.在类中创建一个本类对象

3.提供一个方法可以获取到该对象

package com.dreamly.day02;

/**
 * @author dreamly
 *
 */
public class SingleDemo {

    /**
     * 原则:定义单例,建议使用饿汉式,懒汉式在并发时容易出现实例化混乱的问题,只有加锁和多线程双重判断才能解决问题,相比饿汉式,代码量长了判断多了而且费时费力
     * 
     */
    public static void main(String[] args) {
        Single s1=Single.getInstance();
        Single s2=Single.getInstance();
        System.out.println(s1==s2);
    }
}
/*
 * 这个是先初始化对象
 * 称为:饿汉式
 * Single类一进入内存,就已经创建好了对象
/*
 class Single{
    private Single() {}
    private static Single s=new Single();
    public static Single getInstance() {
        return s;
    }
}
*/
/*
 * 对象是在方法被调用时,才初始化,又叫对象的延时加载
 * 称为:懒汉式
 * Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
 */
class Single{
    private static Single s=null;
    private Single() {};
    public static Single getInstance() {
        if(s==null) {
            synchronized (Single.class) {
                if(s==null) {
                    s=new Single();
                }
            }
        }
        return s;
    }
}

 

---恢复内容结束---

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

java软件设计模式——单例设计模式中的饿汉式与 懒汉式示例

单例模式:饿汉式与懒汉式

单例设计模式的懒汉式与饿汉式

单例模式之懒汉式与饿汉式

对象初始化过程与单例设计模式(饿汉式与懒汉式)

关于单例(饿汉式与懒汉式)