首页 > 技术文章 > Java的单例设计模式

fangweicheng666 2021-07-22 11:40 原文

Java的单例设计模式

  • 单例模式可以说是大多数开发人员在实际中使用最多的,常见的Spring默认创建的bean就是单例模式的。
  • 单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。

简单来说,保证一个类在内存中的对象就一个。

底层的实现思路一共分为了3个步骤:

  • 对本类构造方法私有化,防止外部调用构造方法创建对象
  • 创建全局唯一的对象,也做私有化处理
  • 通过自定义的公共方法将创建好的对象返回(类似封装属性后的getXxx() )

实现方式一:饿汉式

package com.cnblogs;
/*
本类用于测试单例设计模式方案1,饿汉式
 */
public class TestSingle1 {
    public static void main(String[] args) {

        MySingle.getMySingle().show();//试试能不能用

        MySingle mySingle1 = MySingle.getMySingle();
        MySingle mySingle2 = MySingle.getMySingle();

        System.out.println(mySingle1.equals(mySingle2));//true
        System.out.println(mySingle1);//com.cnblogs.MySingle@1b6d3586
        System.out.println(mySingle2);//com.cnblogs.MySingle@1b6d3586
    }
}

class MySingle{

    /*
    对象私有化的目的,是为了不让外界直接获取创建好的对象
     */
    private static MySingle mySingle = new MySingle();

    //提供公共的全局访问点,共外界调用对象
    public static MySingle getMySingle(){
        //返回创建好的对象进行返回
        return mySingle;
    }
    /*
    构造方法私有化,不让外部随意调用构造方法创建对象
     */
    private MySingle(){}

    public void show(){
        System.out.println("试试能不能用");
    }
}

实现方式二:懒汉式

package com.cnblogs;
/*
本类用于测试单例设计模式方案2,懒汉式
 */
public class TestSingle2 {
    public static void main(String[] args) {
        MySingle2 s1 = MySingle2.getMySingle2();
        MySingle2 s2 = MySingle2.getMySingle2();

        System.out.println(s1);//com.cnblogs.MySingle2@1b6d3586
        System.out.println(s2);//com.cnblogs.MySingle2@1b6d3586
    }
}

class MySingle2{
    //构造方法私有化
    private MySingle2(){}
    //创建引用类型变量
    private static MySingle2 mySingle2;
    //提供公共的全局访问点
    public static MySingle2 getMySingle2(){
        if(mySingle2 == null){
            //如果为null,就说明之前没有创建
            mySingle2 = new MySingle2();//创建对象
        }
        //直接返回原来的对象
        return mySingle2;
    }
}

推荐阅读