特点: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账号...