JAVA面试重点之-设计模式

今天工作不太忙,回顾看到了设计模式的单例模式,很经典,记录了一下,我之前面试也是经常被问到,初学者可以重点记忆。

单例模式

单例模式通常是指采取一定的方法来保证我们整个系统中,这个类只能存在一个对象实例,并且该类只提供一个可以取得对象实例的方法。

底下是单例模式的两个经典简单案例(饿汉式/懒汉式)

package com.yxb.security.demo.service.serviceImpl;


public class ScannerTest {

    /**
     * @Description:
     * @author : loong
     * @Date: 2024-08-23
     */
    public static void main(String[] args) {
        /*单例模式的特点就是提供唯一一个访问点,就是我们定义的静态方法*/
        Chiese instance = Chiese.getInstance();
        System.out.println(instance);
    }


}

/*饿汉式,类加载的时候,我们就进行实例化*/
class Chiese {
    /*1.想要创建单例模式,首先要防止外部调用,这里我们直接私有化类的构造器*/
    private Chiese() {
    }

    /*2.这里我们已经私有化构造器了,所以想要创建当前类的实例只能从内部实例化*/
    private static Chiese nice = new Chiese();

    /*3.这里我们提供一个供外部调用的方法,因为需要供外部调用,所以方法要加个static,而静态属性只能调静态变量,所以我们实例化的地方也需要进行static修饰*/
    public static Chiese getInstance() {
	/*4.方法里,我们只提供一个被实例化的对象,无论调多少此这个方法,该对象也只是获得已有的被实例化的对象,而不是获得一个新的实例化对象*/
        return nice;
    }
}
/*懒汉式,类加载的时候不进行实例化,当我们调用方法的时候在进行实例化,可以减少一部分的内存资源消耗,但是可能出现线程安全问题*/
class Chiese2 {
    /*想要创建单例模式,首先要防止外部调用,这里我们直接私有化类的构造器*/
    private Chiese2() {
    }

    /*这里我们已经私有化构造器了,所以想要创建当前类的实例只能从内部实例化*/
    private static Chiese2 nice = null;

    /*这里我们提供一个供外部调用的方法,因为需要供外部调用,所以方法要加个static,而静态属性只能调静态变量,所以我们实例化的地方也需要进行static修饰*/
    public static Chiese2 getInstance() {
        if (nice == null){
            nice = new Chiese2();
        }
        return nice;
    }
}

切记一下重点:

1.单例模式的出现就是为了确保我们一个类只有一个实例,并且会提供一个入口(静态方法才可以被外部调用)。

2.饿汉式和懒汉式的区别就是,饿汉式在类加载的时候就直接进行实例化,而懒汉式就是我们需要的时候通过调用方法才进行实例化,可以减少的内存资源占用时间。

3.饿汉式的安全性高一点,使用懒汉式切记要加锁,切记!切记!切记!后续复习到锁那一块在重新走一变懒汉式做回顾。

你可能感兴趣的:(yxb学习专栏,面试,设计模式,职场和发展)