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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm 全局搜索没反应

    pycharm 全局搜索没反应修改快捷键占用右键–工具箱–属性设置–高级–系统功能快捷键

    2022年5月31日
    102
  • python 爬虫之selenium可视化爬虫

    python 爬虫之selenium可视化爬虫文章目录前文回顾快速入门元素定位页面操作等待方式扩展程序加载前文回顾一文带你了解Python爬虫(一)——基本原理介绍一文带你了解Python爬虫(二)——四种常见基础爬虫方法介绍之所以把selenium爬虫称之为可视化爬虫主要是相较于前面所提到的几种网页解析的爬虫方式selenium爬虫主要是模拟人的点击操作selenium驱动浏览器并进行操作的过程是可以观察到的就类似于你在看着别人在帮你操纵你的电脑,类似于别人远程使用你的电脑当然了,selenium也有无界面模式快速入门sel

    2022年5月9日
    29
  • 中介模式和学习日记Effective C++

    中介模式和学习日记Effective C++

    2022年1月8日
    38
  • anaconda python 版本对应关系

    anaconda python 版本对应关系本文更新于2019.11.18更新了今年的版本号 在表格中用括号备注了包含的python版本号Releasedate conda python2.7 python3.4 python3.5 python3.6 python3.7 python3.8 2015-02-25 3.4.3 …

    2022年5月8日
    147
  • java extends runtimeexception_Java中RuntimeException和Exception的区别

    java extends runtimeexception_Java中RuntimeException和Exception的区别1.引入RuntimeExceptionpublicclassRuntimeException{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubStringstr=”123″;inttemp=Integer.parseInt(str);System.out.println(temp*te…

    2022年7月18日
    25
  • CentOS7安装MySQL(完整版)

    CentOS7安装MySQL(完整版)在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。1下载并安装MySQL官方的YumRepository[root@localhost~]#wget-i-chttp://dev.mysql.com/get/mysql57-community-release-…

    2022年4月28日
    30

发表回复

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

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