Java设计模式之单例模式

1.介绍

单例模式:是一种常用的软件设计模式,中心思想:一个类保证只有一个实例。

2.使用场景

有些对象我们只需要一个,如果一个全局使用的类频繁地创建与销毁,这样会造成很多io的消耗。例如我们在实际项目中:对于配置文件、工具类、线程池、缓存、日志对象等。这些对象,我们都是需要保证其实例只有一个,所以需要单例模式的构建。

学习过Spring的同学,应该都知道在Spring中Bean的scope(作用范围)参数的缺省设定值就是单例模式。每个bean定义只生成一个对象实例,每次getBean请求获得的都是这个唯一实例。

3.Java代码实现

a.单例模式–饿汉模式的创建

/**
 * 单例模式singleton
 * 饿汉模式EagerSingleton
 * 特点:加载类时比较慢,但是运行时获取对象的速度比较快,线程安全。
 */
public class EagerSingleton {
    //1.将构造方法私有化,外界无法直接创建多个实例
    private EagerSingleton() {

    }

    //2.创建类的唯一实例,使用private static修饰,外界不能直接访问
    private static EagerSingleton instance = new EagerSingleton();

    //3.提供一个用于获取唯一实例的方法,使用public static修饰
    public static EagerSingleton getInstance() {
        return instance;
    }

}

b.单例模式–懒汉模式的创建

package com.hugo.designpattern;

/**
 * 单例模式singleton
 * 懒汉模式LazySingleton
 * 特点:加载类时比较快,但是运行时获取对象的速度比较慢,线程不安全。
 */
public class LazySingleton {
    //1.将构造方法私有化,外界无法直接创建多个实例
    private LazySingleton() {

    }

    //2.创建类的唯一实例,使用private static修饰,外界不能直接访问
    private static LazySingleton instance;

    //3.提供一个用于获取唯一实例的方法,使用public static修饰
    public static LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }

}

c.饿汉模式和懒汉模式的区别

因为***饿汉模式***在加载类时,就直接new一个唯一实例,所以加载时,速度会比较慢;另一方面,正是由于类加载时就创建了这个唯一实例,所以运行时,获取对象实例,速度会比较快。线程安全。

因为***懒汉模式***在加载类时,并没有直接new一个唯一实例,所以速度会比较快;另一方面,运行时,获取对象实例,对象存在就直接返回,不存在就new一个唯一实例,速度会比较慢。线程不安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值