单例模式是什么?
一. 什么是单例模式
单例模式是什么?单例模式是23种设计模式中创建型模式的一种,通过单例模式创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式:饿汉式、懒汉式。
二. 单例模式的实现
接下来咱们就来讲一下单例模式的两种基本实现方式:饿汉式、懒汉式。
1. 饿汉式
代码如下所示:
import com.qianfeng.ran
/*
* @author:
*
* 由饿汉式创建的类:老婆类
*/
public class Wife{
//创建一个自身实例对象的私有化静态属性
private static Wife wife = new Wife();
//创建私有化无参构造方法
private Wife(){
}
//创建一个供外界获取当前实例对象的公开静态方法
public static Wife getInstance(){
return wife;
}
}
class Demo{
public static void main(String[] args) {
Wife wife1 = Wife.getInstance();
Wife wife2 = Wife.getInstance();
//打印结果会是 true
System.out.println(wife1 == wife2);
}
}
从上面案例可以看出,构造方法被私有化后,我们只能通过它提供的方法 getInstance() 来获取当前类的实例对象。而我们每次获取的对象都会是同一个,所以 Wife 是个单例模式的类。
而从 Wife 类中我们能看得到它有个静态的私有属性,这个私有属性就是当前类的实例对象。也就是说不管我们还没有调用这个类,类中的静态对象属性在加载进内存中的时候已经存在了,这个就是饿汉式的特点。
饿汉式就婚姻里的对象一样,他(她)一早就出现在这个世上,只是需要你们彼此寻找到对方而已。
2. 懒汉式
接下来再以孩子为例,来创建一个懒汉式类,代码如下所示:
import com.qianfeng.ran
/*
* @author:
*
* 由懒汉式创建的类:孩子类
*/
public class Child{
//创建一个类型为当前类的私有化静态属性
private static Child child;
//创建私有化无参构造方法
private Child(){
}
//创建一个供外界获取当前实例对象的公开静态方法
public static Child getInstance(){
//判断静态属性是否为 null
if(child == null){
//如果为 null 则创建当前类对象并赋值给静态属性
child = new Child();
}
return child;
}
}
class Demo{
public static void main(String[] args) {
Child child1 = Child.getInstance();
Child child2 = Child.getInstance();
//打印结果会是 true
System.out.println(child1 == child2);
}
}
这个案例也是一样构造方法被私有化,只能通过其提供的静态方法获取其实例对象。
在 Child 类中它也有个静态的私有属性,但是这个静态属性并没有赋值,只有在第一次调用 Child 类获取实例方法 getInstance() 的时候,才会创建当前类的实例对象并赋值给其属性并返回。因此在没有调用其方法之前,对象是没有创建的,只有等到需要的时候才会被创建,这就是懒汉式。
懒汉式就孩子一样,他们并不会一开始就存在,只有当你创造他的时候才会存在。而你与你的对象创建出来每一个孩子都会是独一无二的,即使你生好几个,每一个也都是唯一的。
相关推荐HOT
更多>>算法评测标准---空间复杂度是什么?
算法评测标准---空间复杂度是什么?空间复杂度是什么?一. 空间复杂度的概念,复杂度(Space Complexity),是对一个算法在运行过程中临时占用存...详情>>
2023-03-23 20:15:04怎么用css画三角形?
怎么用css画三角形?border这里的像素值 和 border-left这里的像素值可以是不一样的,也可以是一样的,根据三角形的形状来进行具体设置值即可,要...详情>>
2023-03-23 15:27:16Maven集成 tomcat插件及使用教程
在实际的项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试。这样多个项目引用tomcat插件,配置不同的端口,就可以同时启动N个...详情>>
2023-02-23 14:44:00扫盲CSS中常见的单位
Px是pixel的简写, 被称之为像素单位, px可以在计算机屏幕上,能达到预期的效果,在打印机和其它的高分辨率设备上,它又能取得所希望的效果, 一...详情>>
2023-02-16 13:47:00