面试官喜欢问的 设计模式之单例模式,java常见排序算法面试题

如果一个类从始至终只能创建一个实例,把这个类就称为单例类。

1. 什么是单例设计模式

单例设计模式就是采取一定的方法保证在整个的软件系统中,对于某个类只能存在一个对象实例 ,并且该类只提供一个得到其对象实例的方法。

如果要求类在一个虚拟机中只能产生一个对象,不能自由创建该类的对象。避免其他类创建该类的实例,我们首先必须将类的构造器的访问权限设置为 private ,把该类的构造器隐藏起来了。这样就不能用 new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量,也必须用static修饰?。

2. 单例模式的两种形式

2.1 懒汉式

示例代码:

public class Singleton1 {

// 提供当前类型的静态变量

private static Singleton1 s;

// 构造方法私有化,这样类就不会被实例化

private Singleton1() {

}

// 对外提供一个公开的、静态的方法,获取Singleton1对象

public static Singleton1 getInstance() {

// 如果s为null,表明还没有创建Singleton1对象

// 否则,表明已经创建了对象

if (s == null) {

// 创建Singleton1对象

s = new Singleton1();

}

return s;

}

public static void main(String[] args) {

// 创建Singleton1对象不能使用构造器,只能通过getInstance()方法获取实例

Singleton1 s1 = Singleton1.getInstance();

Singleton1 s2 = Singleton1.getInstance();

System.out.println(s1 == s2);

}

}

代码执行结果:

true

? ? ? ?通过 getInstance() 方法,保证 Singleton1 类只能产生一个对象。因此,代码最后的执行结果是 true,说明 Singleton1 对象实际上是同一个对象。

懒汉式存在线程安全的问题,在下面将会解决线程安全问题。

2.2. 饿汉式

示例代码:

public class Singleton2 {

// 提供当前类型的静态变量

// 类加载的时候只执行一次

private static Singleton2 s = new Singleton2();

// 构造方法私有化

private Singleton2() {

}

// 提供公共的静态的方法,返回当前类的对象

public static Singleton2 getInstance() {

return s;

}

public static void main(String[] args) {

// 创建Singleton2对象不能使用构造器,只能通过getInstance()方法获取实例

Singleton2 s1 = Singleton2.getInstance();

Singleton2 s2 = Singleton2.getInstance();

面试资料整理汇总

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。需要这些资料的小伙伴后台私信【面试】即可领取哦

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值