面试官:设计模式中的单例模式是什么?

书山有路勤为径,学海无涯苦作舟
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

 title=

@[TOC]


前言

今天是周末,大部分人应该在家惬意的休息呢吧,但是我们电子缝纫机厂还正在如火如荼的进行中,这就是电子厂的特点,天天都能上班天天都能赚钱,羡慕吧。

面试官:设计模式中的单例模式是什么?_第1张图片

今天下了班早点回宿舍,因为约了一个面试,说实话现在我都面麻了,老是自我介绍,我都快吐了。

面试官:设计模式中的单例模式是什么?_第2张图片

一、面试

面试官:你可以说一下设计模式中的单例模式吗?

我:单例模式是结构最简单的设计模式,在它的核心结构中只包含一个称为单例类的特殊类。通过单例模式可以确保系统中的一个类只有一个实例而且该实例易于被外界访问,从而方便对实例个数进行控制,节约系统资源。

面试官:你可以说一下我们平时哪里用到单例模式了吗?

我:比如我们电脑中的任务管理器,我们只能打开一个任务管理器,这就是单例模式的一种体现,单例就是只有一个。

面试官:你可以写一个简单的单例模式的实现吗?

1、首先写一个单例类

public class Singleton {
    private static Singleton instance = null; //静态私有成员变量

    //私有构造函数
    private Singleton(){

    }

    //静态公有工厂方法,返回唯一实例
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

2、然后写一个测试类进行测试

public class Test {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        //判断两个对象是否相同
        if(s1 == s2){
            System.out.println("两个对象是相同实例");
        }else{
            System.out.println("两个对象是不同的实例");
        }
    }
}

在这里插入图片描述

面试官:什么是饿汉式单例,什么是懒汉式单例呢?

我:饿汉式单例就是在类加载的时候就实例化单例对象,懒汉式单例是在调用单例类方法的时候实例化对象。

例如:饿汉模式

public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();
    private EagerSingleton(){

    }
    public static EagerSingleton getInstance(){
        return instance;
    }
}

面试官:什么是懒汉单例模式双重检查锁定机制呢?

我:在懒汉模式中是通过调用getInstance()方法来实例化对象的,如果在多线程情况下就会产生问题,所以我们需要进行检查锁定机制来判断一下。

public class LazySingleton {
    private volatile static LazySingleton instance = null;

    private LazySingleton(){}

    public static LazySingleton getInstance(){
        //第一重判断
        if(instance == null){
            //锁定代码块
            synchronized (LazySingleton.class){
                //第二重判断
                if (instance == null){
                    instance = new LazySingleton();//创建单例实例
                }
            }
        }
        return instance;
    }
}

面试官:小伙子回答的真不错啊,什么能入职呢?

我:猴年马月吧

二、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧,另外可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟!回复【项目】有我为大家准备的一些项目源码。回复【简历模板】有我为大家准备的简历模板。

本文参与了思否技术征文,欢迎正在阅读的你也加入。

你可能感兴趣的