java 23种设计模式之创建型—单例模式(1)

单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。

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

单例模式又分很多种,必须饿汉式,懒汉式,登记式。

那么我们如何创建一个单例模式类,并且他也是线程安全的,我们首先想到的就是饿汉式,因为他是线程安全的

见以下代码

public class account {
	private account(){
		
	}
	/*
	 * 创建一个线程安全的单例类
	 * 线程安全:
	 * 你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。
	 * 如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的。
	 * 就是线程安全的
	 * 饿汉单例是天生的线程安全
	 */
	private static final account ac = new account();
	public static account getAccount(){
		return ac;	
	}
	public void getName(String name){
		System.out.println("hello "+name);
	}
	
}


测试类:


public class demo {

	public static void main(String[] args) {
		account ac1 = account.getAccount();
		ac1.getName("李华");
		account ac2 = account.getAccount();
		ac2.getName("王华");
		if(ac1 == ac2){
			System.out.println("创建的是同一个类哦");
		}else{
			System.out.println("创建的不是同一个类哦");
		}

	}

}
这里我们最后打印出的结果是“创建的是同一个类哦”



下面说说懒汉式。懒汉式,他是在get方法里面实例化了当前对象

	//懒汉式,顾名思义,它比较懒,最后在方法里面创建
	private static account ac = null;
	public static account getAccount(){
		if(ac == null){
			ac = new account();
		}
		return ac;
	}
在多线程里,为了线程安全我们必须用synchronized关键字锁定


如:synchronized关键字 public static synchronized account getAccount()

只要符合线程安全都可以。


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img