登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Java设计模式之单例模式详解--独一无二的事物 ...
Java设计模式之单例模式详解--独一无二的事物
[ 复制链接 ]
劳暄美
2025-6-6 19:51:44
前言
本文主要讲述
单例模式
,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。
一. 什么是单例模式
单例模式是23种设计模式中
创建型模式
的一种,通过单例模式的方法创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式:
饿汉式
、
懒汉式
二. 生活中的单例模式
1. 父母
古语有云:身体发肤,受之父母。咱们每个人包括江帅自己也是,都是父母的爱情结晶。亲生的父母永远只会有一对,而你未来的孩子也是一样,也只有一对亲生父母,这就跟单例模式很相似。
2. 婚姻
每个人都渴望拥有能够完美的爱情,与相爱之人步入婚姻的殿堂,携手共度余生。而单例模式就像咱们的生活中的婚姻一样,不管你是否有过婚姻,还是有过多少段婚姻,你的合法妻子最多只会有一个,不可能有多个。婚姻中的伴侣就跟单例模式很相似。
3. 人生
每个人的人生都是不相同的,没有两个一样的独立个体,毕竟每个人的生活经历、成长环境、性格等等都是不一样的,所以造就了独一无二的你。而你就是单例模式最好的表现。
三. 单例模式的实现
接下来咱们就来讲下最基础的两种单例模式实现方式:
饿汉式、懒汉式。
1. 饿汉式
接下来江帅以婚姻中的夫妻对象来举例,使用饿汉式来实现。首先来创建一个
饿汉式
类和客户端。
package 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. 懒汉式
接下来江帅再以孩子为例,用懒汉式实现。创建一个
懒汉式
类和客户端。
package 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() 的时候,才会创建当前类的实例对象并赋值给其属性并返回。因此在没有调用其方法之前,对象是没有创建的,只有等到需要的时候才会被创建,这就是懒汉式。
懒汉式就孩子一样,他们并不会一开始就存在,只有当你创造他的时候才会存在,而你与你的对象创建出来每一胎的孩子都会是独一无二的,即使你多生几个,每一个都是唯一的。
四. 配套
如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看帮你筛选出的视频教程。
与本文配套的Java学习视频,戳我直达:
五. 总结
单例模式就像生活中独一无二的事物一样,只不过有些早已存在,而有些需要你去创建。在程序中很多场景都会运用到单例模式,它能减少我们需要的对象,降低服务器的压力,提高运行效率。
不过单例模式的两种模式中,懒汉式可能会出现线程安全问题。就像一胎生2个孩子,这样每一胎就是独立的一个对象了。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
发帖
劳暄美
2025-6-6 19:51:44
关注
0
粉丝关注
10
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
猷咎
9988
5
凶契帽
9988
6
接快背
9988
7
氛疵
9988
8
恐肩
9986
9
虽裘侪
9986
10
里豳朝
9986
查看更多