java单例模式案例,及单例体现的关键

java单例模式案例,及单例体现的关键

特点:1,单例类只能有一个实例

2,单例类必须自己创建自己的唯一实例

3,单例类必须给所有其他对象提供这一实例

以打印机为例,一台计算机可以连接多台打印机,但每次打印只能有一台打印机打印一份文件.单例模式就是如此,保证只有一个出口,避免政出多头.

案例:

单例类:

package singleTon;


public class Singleton1 {
	private String name;
	private static Singleton1 singleton1=null;
	
	private Singleton1(){
		
	}
	public static Singleton1 newInstance(){
		if(singleton1==null){
		singleton1=new Singleton1();
		}
		return singleton1;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

测试类:

package singleTon;

public class Test {

	public static void main(String[] args) {
		Singleton1 singleton1=Singleton1.newInstance();
		singleton1.setName("name1");
		System.out.println(singleton1.getName());
		Singleton1 singleton12=Singleton1.newInstance();System.out.println(singleton12.getName());
		singleton12.setName("name2"); 
		System.out.println(singleton1.getName());
		System.out.println(singleton12.getName());
		System.out.println(singleton1==singleton12);
	}

}

说明:直接看测试类,第一步调用newInstance()方法,进入到Singleton1类中,判断静态变量singleton1是否为null,为null则new 对象,回到测试类,给name赋值,打印为“name1”.

第二步,接着再次执行newInstance()方法,进入到Singleton1类中,判断静态变量singleton1是否为null.这里是为什么命名为单例模式的关键。因为第一步已经new了一次,静态变量singleton1已经不为null,因此不会再去new对象,而是直接返回到测试类,把对象singleton1赋给singleton12,所以无论后面有执行多少次newInstance()方法,所有的对象都是第一次的singleton1.

第三步,看打印的结果,分别是“name1””name2″,”name2″,”true”.

仍有疑问的朋友,可以复制代码,debug运行,根据说明讲解细细体会。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106355.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 实参和形参「建议收藏」

    实参和形参「建议收藏」今日内容实参和形参:实参:位置形参的范畴:位置形参位置形参默认形参的deffn(a=10,b=20):print(a,b)#默认形参可以由位置实参与关键字实参来传值,还

    2022年8月6日
    1
  • idea2022.2.4激活码(JetBrains全家桶)

    (idea2022.2.4激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    914
  • Apifox(2)快速上手apifox

    Apifox(2)快速上手apifox快速上手使用场景Apifox是接口管理、开发、测试全流程集成工具,使用受众为整个研发技术团队,主要使用者为前端开发、后端开发和测试人员。前端开发接口文档管理接口数据Mock接口调试前

    2022年7月30日
    8
  • OSChina 周二乱弹 ——区块链与女朋友之间的关系[通俗易懂]

    OSChina 周二乱弹 ——区块链与女朋友之间的关系[通俗易懂]2019独角兽企业重金招聘Python工程师标准>>>…

    2022年7月27日
    9
  • PyTorch 学习笔记(九):自动编码器(AutoEncoder)「建议收藏」

    PyTorch 学习笔记(九):自动编码器(AutoEncoder)「建议收藏」一.生成模型生成模型(GenerativeModel)这一概念属于概率统计与机器学习,是指一系列用于随机生成可观测预测数据得模型。简而言之,就是“生成”的样本和“真实”的样本尽可能地相似。生成模型的两个主要功能就是学习一个概率分布Pmodel(X)P_{model}(X)Pmodel​(X)和生成数据,这是非常重要的,不仅可以用在无监督学习中,还可以用在监督学习中。无监督学习的发展…

    2022年6月10日
    52
  • 【笔试题】2019海康威视嵌入式软件开发工程师(BSP)笔试题(附超详细解答)「建议收藏」

    【笔试题】2019海康威视嵌入式软件开发工程师(BSP)笔试题(附超详细解答)「建议收藏」海康威视嵌入式软件工程师的题目只包含两个部分选择题和简答题,也就是说,没有编程题!照样是C语言基础的题量最多了,又因为是BSP方向,所以关于Linux操作系统和驱动方面的题目可能页会比较多一点,但是就题目的总体难度而言,也并不是特别难。但如果对Linux、驱动方面不是很了解的话,估计会很吃亏的。选择题1、若有8个待排序元素,采用冒泡排序和插入排序最大时间复杂度分别是()。64…

    2022年6月24日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号