单例设计模式
1.静态方法和属性的经典使用
2.设计模式是大量的实践中总结和理论化之后优先的代码结构,编程风格,以及解决问题的思考方式。设计模式就像是经典的棋谱,免去我们自己思考和摸索
3.单例(单个的实例)
- 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
- 单例模式有两种方式:(1)饿汉式(2)懒汉式
- 饿汉式在开发时使用的,而懒汉式是面试时用,一般说手写一个延迟加载模式
- 饿汉式和懒汉式的区别:
- 饿汉式是空间换时间,懒汉式是时间换空间
- 在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可以会创建多个对象
- 饿汉式不管使用不使用都要创建,而懒汉式要在使用时才创建,不使用不创建
- 在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可以会创建多个对象(是由于多线程造成的)
4.饿汉式的实现步骤
- 将构造器进行私有化 ===》防止直接
new
本类对象 - 在类内部创建本类的对象,并且是
static
- 对外提供公共静态的访问方法
package JAVA面向对象高级部分.static_.codeBlock.single_;
public class SingleInstance {
//第一步:将构造器进行私有化
private SingleInstance(){}
//第二步:在类内部创建本类对象,并且是static,因为要对外提供静态访问方法
//静态方法只能访问静态属性和静态方法
private static SingleInstance instance = new SingleInstance();
//第三步:对外提供公共的静态的访问方法
public static SingleInstance getInstance(){
return instance;
}
}
class SingleTest {
public static void main(String[] args) {
SingleInstance instance = SingleInstance.getInstance();
SingleInstance instance1 = SingleInstance.getInstance();
System.out.println(instance == instance1);
}
}
5.懒汉式的实现步骤
- 将构造器进行私有化
- 进行声明
- 对象提供公共静态的访问方法,并在该方法中创建对象和判断
package JAVA面向对象高级部分.static_.codeBlock.single_;
class SingleInstance {
//第一步:将构造器进行私有化
private SingleInstance(){}
//第二步:进行声明
private static SingleInstance instance = null;
//第三步:对外提供公共静态的访问方法
public static SingleInstance getInstance(){
if (instance == null){
return new SingleInstance();
}
return instance;
}
}
class SingleTest {
public static void main(String[] args) {
SingleInstance instance = SingleInstance.getInstance();
SingleInstance instance1 = SingleInstance.getInstance();
System.out.println(instance == instance1);
}
}
饿汉式和懒汉式的区别:
- 二者最主要的区别在于创建对象的时机不同:饿汉式在类加载时就创建了对象实例,而懒汉式是在使用时才创建对象
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
- 饿汉式存在浪费资源的可能,因为如果不使用该对象实例就浪费了,懒汉式是使用才创建,但是存在线程安全问题
- 在我们
javaSE
标准类中,java.lang.Runtime
就是经典的单例模式