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运行,根据说明讲解细细体会。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • J2ME开发专题[通俗易懂]

    J2ME开发专题[通俗易懂]http://www.csdn.net/subject/j2meTools/ 

  • 闪闪发光的文字特效代码[通俗易懂]

    闪闪发光的文字特效代码[通俗易懂]<bid=”nr”>我是一排闪闪发光的文字,看起来是不是特别的绚烂!<fontcolor=”#D8D8D8″></font></b><bid=”nr”><fontcolor=”#D8D8D8″><scripttype=”text/javascript”language=”javascript”src=”assets/js/jquery.min.js”></script><sc..

    2022年10月17日
  • MAC下Myeclipse SVN插件安装(亲测成功)[通俗易懂]

    MAC下Myeclipse SVN插件安装(亲测成功)[通俗易懂]今天在mac上安装MyEclipse后安装SVN插件,按照网上的教程

  • mybatis插件原理_mybatis分页查询实现

    mybatis插件原理_mybatis分页查询实现目录一、mybatis插件介绍二、mybatis插件原理1、创建2、拦截1)首先是ParameterHandler的创建,在Configuration类当中:2)interceptorChain保存了所有的拦截器(interceptors),是mybatis初始化的时候创建的。3、应用1)类相关代码2)插件配置,在sqlMapConfig.xml中三、自定义插件1、插件接口2、自定义插件1)相关类代码2)相关配置sqlMapConfig.xml3)mapper接口4)mapper.

  • Linux系统平均负载是如何计算的?[通俗易懂]

    Linux系统平均负载是如何计算的?[通俗易懂]关于负载的计算,它的结果是包含有小数的一个浮点数,内核中是不能使用float变量的,那么这里就采用了一个整型变量的低11位来表示小数部分。那么对于数值1来说,它就是FIXED_1,也就是需要对1进行左移11bit。实际上此时这个整型变量保存的值是1024。cat/proc/loadavg0.430.580.655/701045102那么我们通过cat命令查看负载值如上说是,它显示的是带有两个小数表示的一个浮点数,所以最后在输出这个数值时还需要做一个转换,如果从1024个值中得出这100小数

  • JsonNode、JsonObject常用方法[通俗易懂]

    JsonNode、JsonObject常用方法[通俗易懂]jsonNode,fastJson常用的方法

发表回复

您的电子邮箱地址不会被公开。

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