单身模式(Singleton)

本文深入解析单例模式,探讨其目的、实现方式及应用场景。单例模式确保类仅有一个实例,通过构造函数私有化、静态成员和静态方法实现。以配置文件为例,解释为何单例模式在软件设计中不可或缺。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:

保证一个类只创建唯一一个对象。
例如:配置文件

实现:

1. 构造函数私有化。

无法new,则:
类外不可创建对象
类不可被继承

2. 类的静态成员

属于类,而不属于对象。
不需要通过对象或者指向对象的指正引用。
静态方法可以访问直接访问静态对象。
类名加点直接访问静态成员,不通过对象来访问。(访问权限可以的情况下)

3. 类的静态方法在引用时遵循访问权限
  1. 静态方法可调用静态变量
  2. 要遵循访问权限
  3. 静态方法需要 类名.方法名 访问,不是对象

设计模式之禅中的介绍

  1. 这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝。
  2. 中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,
    先看类图:
    在这里插入图片描述
代码实现:
package com.cbf4life.singleton3; 
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 通用单例模式
*/
public class SingletonPattern { 
private static SingletonPattern singletonPattern= null; 
//限制住不能直接产生一个实例
private SingletonPattern(){ 
 } 
public SingletonPattern getInstance(){ 
if(this.singletonPattern == null){ //如果还没有实例,则创建一个
this.singletonPattern = new SingletonPattern(); 
 } 
return this.singletonPattern; 
 } 
}
  1. 假如现在有两个线程 A 和线程 B,线程 A 执行到 this.singletonPattern = new SingletonPattern(),正在申请内存分配,可能需要 0.001 微秒,就在这 0.001 微秒之内,线程 B 执行到 if(this.singletonPattern == null),你说这个时候这个判断条件是 true 还是 false?是 true,那然后呢?线程 B 也往下走,于是乎就在内存中就有两个 SingletonPattern 的实例了,看看是不是出问题了?
package com.cbf4life.singleton3; 
/**
* @author cbf4Life cbf4life@126.com
* I'm glad to share my knowledge with you all.
* 通用单例模式
*/
@SuppressWarnings("all") 
public class SingletonPattern { 
private static final SingletonPattern singletonPattern= new
SingletonPattern(); 
//限制住不能直接产生一个实例
private SingletonPattern(){ 
 } 
public synchronized static SingletonPattern getInstance(){ 
return singletonPattern; 
 } 
}
  1. 直接 new 一个对象传递给类的成员变量 singletonpattern,你要的时候 getInstance()直接返回给你,解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值