【面试常问】说一下你对单例模式的理解

说一下你对单例模式的理解

      设计模式在开发中是重中之重,尤其是单例模式,因此也就成了面试中的高频问题,决定整理一下;如有错误还请个位指正!

什么是设计模式

在说单例模式前我们先说说什么是设计模式;

      所谓设计模式,就是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构;

设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、
原型模式;

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模
式、组合模式、享元模式;

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、
责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解
释器模式;

单例模式

单例就是该类只能返回一个实例;

单例所具备的特点

  1. 私有化的构造函数
  2. 私有的静态的全局变量
  3. 公有的静态的方法

单例实现的主要步骤

  1. 将该类的构造方法定义为私有方法,(私有化构造器)这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;
  2. 在该类内提供一个公共静态返回该类实例对象的⽅法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;

饿汉式

先初始化对象,Single类⼀进内存,就已经创建好了对象;

public class Single{
    //直接创建对象
    private static Single s=new Single();
    //私有化构造函数
    private Single(){}
    //返回对象实例
    public static Single getInstance()
    {
        return s;
    }
}

懒汉式

对象是⽅法被调⽤时才初始化,也叫做对象的延时加载;

  • Single类进内存,对象还没存在,只有调⽤了getInstance⽅法时,才建⽴对象
public class Single{
    //声明变量
    private static Single s=null;
    //私有构造函数
    private Single(){}
    //提供对外方法
    public static synchronize Single getInstance()
    {
        if(s==null){
            s=new single();
        }
        return s;
    }
}
  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
面试常问设计模式有很多,以下是一些常见的设计模式: 1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 2. 工厂模式(Factory Pattern):定义一个用于创建对象的接口,由子类决定实例化哪个类。 3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。 4. 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 5. 原型模式(Prototype Pattern):通过复制现有对象来生成新对象,避免了使用new关键字创建对象。 6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口。 7. 装饰器模式(Decorator Pattern):动态地给对象添加额外的职责,同时又不改变其结构。 8. 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。 9. 策略模式(Strategy Pattern):定义了一系列的算法,并将每个算法封装起来,使它们可以互相替换。 10. 模板方法模式(Template Method Pattern):定义了一个算法的骨架,将一些步骤延迟到子类实现。 这些只是一些常见的设计模式,具体还会根据面试的要求和职位不同而有所变化。在面试重要的是理解每个设计模式的原理、适用场景以及优缺点,并能够灵活运用到实际问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willing卡卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值