[Java笔记]面向对象-单例模式

单例模式

目标

使JVM中最多只有一个该类的实例,以节省内存。缺点:只能建一个该类的实例。

实现

具体实现思路:
1构造方法私有化//故在外面不能new很多次
2对外提供一个公开的静态的类方法,获取类对象//故外面可以得到类
3提供一个当前类类型的静态变量。//方便只new一次

两种实现方式:
1饿汉模式:在未调用方法时就创建了类的实例。
2懒汉模式:在调用方法时才创建类的实例。较优,因为不调用方法就创建了类的实例无用。

相关知识

1静态变量区别于成员变量,在类内可以直接调用(不用有对象this.来调用),静态变量只在类加载时初始化且只初始化一次。
2静态方法区别于成员方法,不用先创建类的实例,可以直接用类名调用。
3如果==两边是普通类型则比较的是值,如果==两边是引用类型,则比较的是内存地址。
4使用测试类进行测试

代码

1饿汉模式

public class Singleton {
	static Singleton s=new Singleton();
	
	private Singleton() {};
	
	public static Singleton getSingleton() {
		return s;
	}
}

2懒汉模式

public class Singleton {
	static Singleton s=null;
	
	private Singleton() {};
	
	public static Singleton getSingleton() {
		if(s==null) {
			s=new Singleton();
		}
		return s;
	}
}

测试类

public class SingleTonTest {
	public static void main(String args[]) {
		Singleton s1=Singleton.getSingleton();
		Singleton s2=Singleton.getSingleton();
		System.out.println(s1==s2);
	}
}

测试结果
true

原文地址:https://www.cnblogs.com/coding-gaga/p/10440377.html