程序员把青春抚养大程序员

设计模式--单例模式篇

2018-01-24  本文已影响29人  雨果是程序员

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一个唯一实例,速度会比较慢。线程不安全。

上一篇下一篇

猜你喜欢

热点阅读