javaSE复习之——设计模式_单列设计模式
概述
单列设计模式就是保证
某个类只能被创建一个对象
如何保证这个类在内存中只有一个对象呢?
1、私有化它的构造方法,不让别的类访问这个类
2、在这个类中定义一个本类的对象,并且将它私有化、静态化、并且用最终修饰符修饰。
3、创建一个静态的get方法返回对这个对象的引用
代码示例1(饿汉式)
1 | class Singleton { |
为什么叫饿汉式?
因为类一加载就要创建对象,比喻一个饿汉一上来就要吃,吃的东西也就是new的这个对象。
- ps:
其实get方法都可以不需要创建,因为引用对象的成员变量是用final修饰的,直接调用即可,当然这样就不是饿汉式了,而是第三种格式。
代码示例2(懒汉式)
1 | class Singleton { |
ps:因为它比较懒,要用到的时候才去创建,所以叫懒汉式,但是平时开发不用懒汉式,而用饿汉式。
为什么平时用饿汉式?
- 答:
因为虽然懒汉式不会浪费空间内存,但是他会有线程安全问题
- 举个例子:
当我线程1和线程2要获取这个类,当cpu执行的线程1刚好判断进去创建对象的时候,突然cpu又去执行线程2了,当cpu执行完线程2的时候已经创建好了一个对象,这时cpu又回来执行线程1,那么就创建了两个对象,所以它会又线程安全问题。
- 举个例子:
那懒汉式什么时候用?
- 答:
面试的时候!面试的时候会出一个
“请写出一个单例的延迟加载模式”
,那么这个时候其实就是让我们写懒汉模式。
两种单例模式实现的区别
1、饿汉式它是空间换时间
- 解析:
因为一上来就直接创建对象,要用的时候直接调用,所以要用的时候速度相对更快2、懒汉式它是时间换空间
- 解析:
因为一上来它不创建对象,而要用的时候先判断再创对象,而且以后每次需要用都要判断,所以浪费了时间3、在多线程访问时,饿汉式绝对不会创建多个对象,而懒汉式就会存在线程安全问题,会创建多个对象
Runtime类概述:
每个java程序都有一个Runtime类,它与运行环境相连接,它就是是使用的
单例设计模式
。
Runtime是的应用场景
当我们需要执行cmd之类的命令的时候就可以勇担Runtime中的exec方法