当前位置: 首页 > news >正文

设计模式 单例模式

单例模式就是在整个程序运行的过程中,这个类的实例化对象只有一个。

单例模式和private static 有密切的关系。

举一个例子:

一个wife,在法律允许的范围内,只能有一个。

public class Wife{

	private static Wife wife= null; //定义一个wife放在那里,然后给这个wife名字
 
	private Wife(){ 
	 //世俗和道德约束你,目的就是不让你产生第二个wife,也就是private修饰的构造方法
	 //一旦无参构造函数被重载了,那么系统默认的由系统创建的无参构造函数就会被覆盖
	} 
	 
	public static Wife getInstance(){
	
		 if(wife == null){ //如果wife还没有定义,那就定一个
			 wife = new Wife(); //这个是private修饰的构造方法
		 } 
		 return wife ; 
     } 
} 
//wife叫什么名字呀
public static void WifeInfo(){ 
 System.out.println("我就是某某某...."); 
 } 
} 

static:

jvm在初始化时,就会加载static变量。

让对象在运行的时候不用实例化(new)就可以使用。

因为在jvm初始化时,已经实例化过了。

当前类永远都使用一个实例,否则所有调用的地方需使用New去获取实例,不够简洁。


private static :
私有常量。仅能作用于本类的静态代码块/静态成员方法中。
因为被static修饰的方法只能调用被static修饰的属性(static修饰的属性不仅仅能被static修饰的方法调用),所以如果一个私有属性会被静态方法调用的话,那么就需要将这个

public static Wife getInstance() 方法 只能用 private static Wife wife



/**
* 
* husband是天天要面见wife,今天见的wife和昨天的,前天不一样那就出问题了!
*/
@SuppressWarnings("all") 
public class Husband{ 
	/**
	 * @param args
	 */
	public static void main(String[] args) { 
		 //第一天
		 Wife wife1=Wife .getInstance(); 
		 wife1.WifeInfo(); //第一天见的wife叫什么名字呢?
		 
		 //第二天
		 Wife wife2=Wife .getInstance(); 
		 wife2.WifeInfo(); 
		 
		 //第三天
		 Wife wife3=Wife .getInstance(); 
		 wife3.WifeInfo(); 
	 
	 //三天见的wife都是同一个人,荣幸吧!
	 } 
} 

但是存在线程不安全的情况,就在判断静态变量是否为空的那个时候,可能存在CPU的调度,导致同一时间有两个进程都运行到了这个判断条件,就会同时满足两个进程创建对象的要求,就存在两个对象,这不是单例模式的要求。

@SuppressWarnings("all") 
public class SingletonPattern { 
	private static final SingletonPattern singletonPattern= new
	SingletonPattern(); 
	 
	//限制住不能直接产生一个实例
	private SingletonPattern(){ 
	 } 
	 
	public synchronized static SingletonPattern getInstance(){ 
	 return singletonPattern; 
	 } 
}

相关文章:

  • SpringBoot集成netty实现websocket通信
  • 详细介绍Springcloud,Springcloud alibaba,dubbo等微服务框架,以及nacos和feign
  • 使用Spring事件机制,合理的进行业务解耦
  • Skywalking(9.7.0) 告警配置
  • 【研发日记】,Matlab/Simulink开箱报告(十)——Requirements Toolbox
  • 【PHP+代码审计】PHP基础——流程控制
  • Mysql数据库的优点
  • 去除PDF论文行号的完美解决方案
  • docker容器镜像管理+compose容器编排(持续更新中)
  • spring-boot-maven-plugin springboot打包配置问题
  • Hibernate是如何处理事务的?请描述一下Hibernate的事务管理。Hibernate中的缓存机制是怎样的?如何配置和使用缓存?
  • 爆肝整理万能sass框架:react18+webpack5+typescript+ant Design,框架在手,交付无忧!!!
  • 2024 GoLand激活,分享几个GoLand激活的方案
  • SOLIDWORKS 2024新版价格 SOLIDWORKS2024专业版白金版多少钱?
  • Windows C++ 任意线程通过hwnd将操作发送到UI线程执行
  • window mysql 安装出现的问题
  • 防火墙中的SNAT 与DNAT
  • 网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择
  • 每日leetcode--接雨水
  • PyTorch之完整的神经网络模型训练
  • 长沙查处疑似非法代孕:有人企图跳窗,有女子被麻醉躺手术台
  • 退休10年后,70岁成都高新区管委会原巡视员王晋成被查
  • 2024年度全国秋粮收购达3.45亿吨
  • 国际足联女子世界杯再次扩军,2031年起增至48支球队
  • 中国证监会印发2025年度立法工作计划
  • 陕西永寿4岁女童被蜜蜂蜇伤致死,当地镇政府介入处理