首页 > 其他分享 >设计模式-单例模式(模拟面试官八股)

设计模式-单例模式(模拟面试官八股)

时间:2024-03-24 19:30:08浏览次数:37  
标签:面试官 Singleton private instance static 单例 singleton 设计模式 public

一、请说下设计模式中,你熟悉的设计模式

单例模式

二、单例模式你有了解吗

单例模式是创建型设计模式,该类负责创建自己的对象,他确保一个类只有一个实例,并且提拱了一个去全局访问点来访问该实例。

二、单例模式有几种实现方式

 1.饿汉式(静态常量)

优点:写法容易,在类加载的时候就已经实例化了,避免了线程同步的问题

缺点:在类实例化的时候就完成实例化操作了,如果没有使用过这个实例,则会发生资源垃圾。

public class Singleton {
    public final static Singleton instance = new Singleton();
    private  Singleton(){}
    public Singleton getInstance(){
        return instance;
    }
}

 2.饿汉式(静态代码块)

public class Singleton {
    private static Singleton instance;
    static {
        instance = new Singleton();
    }
    private  Singleton(){}
    public Singleton getInstance(){
        return instance;
    }
    
}

3.懒汉式(多线程下,会有线程问题,不推荐)

public class Singleton {
    private Singleton(){}
    public static Singleton singleton;
    public Singleton getInstance(){
        if(singleton==null){
            singleton = new Singleton();
        }
        return singleton;
    }
}

 4.饿汉式(在上面的基础上加锁),加static,是为了可以作用于类之上,对整个类都行


public class Singleton {
    private Singleton(){}
    public static Singleton singleton;
    public static synchronized Singleton getInstance(){
        if(singleton==null){
            singleton = new Singleton();
        }
        return singleton;
    }
}

 5.饿汉锁(双检锁)使用volatile和synchronized,也是作用于整个类的锁


public class Singleton {
    private static volatile Singleton instance;
    private Singleton(){}
    public Singleton getInstance(){
        if(instance==null){
            synchronized (Singleton.class){
                instance = new Singleton();
            }
        }
        return instance;
    }
}

 6.饿汉式(在使用的时候才会进行加载),静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的。

优点:避免了线程不安全,延迟加载,效率高。

public class Singleton {
    private Singleton(){}
    private static class SingletonInstance{
        private static final Singleton instance = new Singleton();
    }
    public static Singleton getInstance(){
        return SingletonInstance.instance;
    }
}

三、单例模式的使用场景

  • 要频繁的进行创建和销毁的对象
  • 创建对象时耗时过多或耗费资源过多,但又经常用到的对象;
  •  工具类对象;
  •  频繁访问数据库或文件的对象。

四、哪些源码使用了设计模式,体现在哪些地方? 

 4.1 Spring

Spring依赖注入Bean实例

4.2 Mybatis 

SqlSessionFactory (使用的是懒汉式)

ErrorContent

标签:面试官,Singleton,private,instance,static,单例,singleton,设计模式,public
From: https://blog.csdn.net/qq_62773260/article/details/136818480

相关文章

  • JAVAEE——多线程的设计模式,生产消费模型,阻塞队列
    文章目录多线程设计模式什么是设计模式单例模式饿汉模式懒汉模式线程安全问题懒汉模式就一定安全吗?锁引发的效率问题jvm的优化引起的安全问题阻塞队列阻塞队列是什么?生产消费者模型阻塞队列实现消费生产者模型可能遇到的异常多线程设计模式什么是设计模式首先我......
  • C#设计模式——命令模式(Command Pattern)
    命令模式命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。示例假定要实现一个绘图系统,要求支持撤销功能,下面就用命令模式来实现这一需求。首先定义一个抽象的命令接口publicinterfaceIGraphCommand......
  • Java面试题:用Java并发工具类,实现一个线程安全的单例模式;使用Java并发工具包和并发框架
    面试题一:设计一个Java并发工具类,实现一个线程安全的单例模式,并说明其工作原理。题目描述:请设计一个Java并发工具类,实现一个线程安全的单例模式。要求使用Java内存模型、原子操作、以及Java并发工具包中的相关工具。考察重点:对Java内存模型的理解。对Java并发工具包的了......
  • 设计模式—观察者模式与发布订阅
    观察者设计模式观察者设计模式(ObserverDesignPattern)是一种常用的软件设计模式,它是一种行为型模式。该模式用于定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。结构观察者模式通常涉及以下几个角色:Subject(主......
  • 瑞_23种设计模式_状态模式
    文章目录1状态模式(StatePattern)1.1介绍1.2概述1.3状态模式的结构1.4状态模式的优缺点1.5状态模式的使用场景2案例一2.1需求2.2代码实现(未使用状态模式)2.3代码实现(状态模式)3案例二3.1需求3.2代码实现......
  • 【转】[C#] 单例模式
    来自:阿里的通义灵码在C#中,单例模式实现线程安全时通常会采用双重检查锁定(Double-CheckedLocking,DCL)的策略来确保只创建类的一个实例,并且这个过程是线程安全的。两层lock的设计是为了减少获取锁的开销,尤其是当类的实例已经被初始化的情况下。以下是一个使用双重检查锁定的C#......
  • 大话设计模式
    设计模式的基本概念        设计模式是在特定上下文中解决设计问题的模板。它们不是代码,而是一套解决方案的指导思想。设计模式通常遵循以下几个原则:单一职责原则:一个类应该只有一个引起它变化的原因。开闭原则:软件实体应该对扩展开放,对修改关闭。里氏替换原则:子......
  • 23种设计模式核心思想及代码实现(Java C++)
    目录代码OOP七大原则策略模式单例模式观察者模式装饰模式抽象工厂模式工厂模式简单工厂模式工厂模式抽象工厂模式三种工厂模式的区别简单工厂模式和策略模式的不同pipeline模式职责链模式代理模式静态代理动态代理......
  • 单例模式(上)
    属于创建型模式定义确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。一山不容二虎。2.适用场景ServletContext、ServletConfig、ApplicationContextDBPool。3.常见写法饿汉式单例、懒汉式单例、注册式单例、ThreadLocal式。饿汉式写法publicclassHung......
  • 如何理解23种设计模式?
    问题:如何理解23设计模式?我是一名python开发者,如何用简短的话语来介绍23设计模式?对我的开发有什么帮助吗?AI回答:设计模式是软件工程中的一套被广泛认可的解决特定问题的模板。它们是在多年的软件开发实践中总结出的有效方法。23种设计模式通常指的是《设计模式:可复用面向对象软......