浅谈Java设计模式之单例模式

2023-04-02  本文已影响0人  笔头还没烂

一、设计模式的简单介绍

二、单例模式

  1. 懒汉式:静态公有方法中实例化。

    • 类内实例对象创建时并不直接初始化,直到第一次调用 get 方法时,才完成初始化的操作。

    • 一种时间换空间的编码形式。

    • 懒汉式示例代码如下:

    public class SingletenTwo {
        //1. 创建私有构造方法
        private SingletenTwo() {
    
        }
    
        //2. 创建静态的该类实例对象(懒汉式)
        private static SingletenTwo instance = null;
    
        //3.创建开放的静态方法提供实例对象
        public static SingletenTwo getInstance() {
            if (instance == null) {
                instance = new SingletenTwo();
            }
            return instance;
        }
    }
    

    测试类:

    import com.singleton.SingletenOne;
    import com.singleton.SingletenTwo;
    
    public class Test {
        public static void main(String[] args) {
            SingletenOne one = SingletenOne.getInstance();
            SingletenOne two = SingletenOne.getInstance();
            System.out.println(one);
            System.out.println(two);
    
            System.out.println("=======================");
    
            SingletenTwo one1 = SingletenTwo.getInstance();
            SingletenTwo one2 = SingletenTwo.getInstance();
            System.out.println(one1);
            System.out.println(one2);
        }
    }
    

    输出结果:

    com.singleton.SingletenOne@1540e19d

    com.singleton.SingletenOne@1540e19d

    =======================

    com.singleton.SingletenTwo@677327b6
    com.singleton.SingletenTwo@677327b6

  2. 饿汉式 PK 懒汉式

    • 饿汉式

      (1)在类加载时就创建实例;该类的实例在第一次加载的时候速度快、是一种典型的以空间换时间的操作方式;

      (2)饿汉式线程安全

    • 懒汉式:

      (1)第一次使用时进行实例化;该类的实例在第一次加载的时候速度慢,在该类创建后如果一直不使用该类的实例,也不会造成内存空间的浪费,所以他是一种时间换空间的操作方式;

      (2)懒汉式存在线程风险

      • 解决方案:同步锁、双重校验锁、静态内部类、枚举
上一篇 下一篇

猜你喜欢

热点阅读