Java设计模式之单例设计模式(懒汉、饿汉)

Java设计模式之单例设计模式(懒汉、饿汉)

相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试了?或许不够吧,权当学习了解一下吧。

单例模式的含义: 单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中,
应用该模式的这个类永远只有一个实例。即一个类永远只有一个对象实例。

单例的应用场景:在实际开发中,有很多业务对象永远只需要一个,无论启动多少次
我们只需要一个对象,例如任务管理对象,只需要一个对象。节约内存和性能。

饿汉单例设计模式

屁话上说,直接上代码吧。

package singleinstance;

import org.junit.Test;

/**
 * ClassName: SingleInstanceHungry
 * Description: 饿汉单例设计模式
 * 在用类获取对象的时候,类已经提前创建好了
 * 步骤:①定义一个类,构造器私有
 *       ②定义一个静态变量储存一个对象
 *       //③提供一个返回单例对象的方法
 * Author: hhj
 * Date: 19:58 2019/11/24
 * Version: 1.0
 */
public class SingleInstanceHungry {

    @Test
    public void test01(){
        SingleInstance01 s1 = SingleInstance01.INS;
        SingleInstance01 s2 = SingleInstance01.INS;
        System.out.println(s1);  // singleinstance.SingleInstance01@4ee285c6
        System.out.println(s2);  // singleinstance.SingleInstance01@4ee285c6
        System.out.println(s1 == s2); // true
    }

    @Test
    public void test02(){
        SingleInstance02 t1 = SingleInstance02.getInstance();
        SingleInstance02 t2 = SingleInstance02.getInstance();
        System.out.println(t1);  // singleinstance.SingleInstance02@4ee285c6
        System.out.println(t2);  // singleinstance.SingleInstance02@4ee285c6
        System.out.println(t1 == t2);  //true
    }
}

/**
* Description: 写法一
* @author: hhj
* @date: 20:07 2019/11/24
* @param:
* @return:
*/
class SingleInstance01{
    public static final SingleInstance01 INS = new SingleInstance01();
    private SingleInstance01(){}
}

/**
* Description: 写法二
* @author: hhj
* @date: 20:07 2019/11/24
* @param:
* @return:
*/
class  SingleInstance02{
    public static final SingleInstance02 INS = new SingleInstance02();

    private SingleInstance02(){}

    public static SingleInstance02 getInstance(){
        return INS;
    }
}

懒汉单例设计模式

package singleinstance;

import org.junit.Test;

/**
 * ClassName: SingleInstanceLazy
 * Description: 懒汉单例设计模式
 * 在用类获取对象的时候,才会真正去创建一个对象,而不是提前创建好对象
 * 步骤:①定义一个类,把构造器私有
 * ②定义一个静态变量储存一个对象
 * ③提供一个返回单例对象的方法:在这个方法里面判断是否存在对象了,
 * 如果没有才创建,如果存在了就直接返回。这样保证了对象之创建一个对象
 * Author: hhj
 * Date: 19:59 2019/11/24
 * Version: 1.0
 */
public class SingleInstanceLazy {

    @Test
    public void test(){
        SingleInstance s1 = SingleInstance.getInstance();
        SingleInstance s2 = SingleInstance.getInstance();
        System.out.println(s1);  // singleinstance.SingleInstance@4ee285c6
        System.out.println(s2);  // singleinstance.SingleInstance@4ee285c6
        System.out.println(s1==s2);   // true
    }
}

/**
 * Description: TODO
 *
 * @author: 饿汉单例设计模式
 * @date: 20:22 2019/11/24
 * @param:
 * @return:
 */
class SingleInstance {
    private static SingleInstance ins;

    private SingleInstance(){}

    public static SingleInstance getInstance() {
        if (ins == null) {
            ins = new SingleInstance();
        }
        return ins;
    }
}

可能写的不是很深入,这里只是做一个简单介绍。
因为大学刚毕业的时候确实遇到过两次让我手写单例的情况。下次再遇到相信大家都能写出来的啦!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值