设计模式-单例模式
程序员文章站
2024-02-22 12:55:10
...
这里写代码片
单例模式(饿汉,懒汉)
package singleton;
/**
* 单例模式
* 2018年8月28日 11:20:57
* @author fjf
* 参考: https://www.cnblogs.com/Ycheng/p/7169381.html
*/
public class Test {
public static void main(String[] args) {
System.out.println(new User());
System.out.println(new User());
System.out.println(User1.getInstance());
System.out.println(User1.getInstance());
System.out.println(User2.getInstance());
System.out.println(User2.getInstance());
}
}
// 1.正常的user类定义
class User {
// 默认为无参的构造函数
/*
* public User() { super(); }
*/
}
/**
* 单例模式
*
* @author fjf 饿汉式的 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
*/
class User1 {
private static User1 u1 = new User1();
// 构造函数 私有化
private User1() {
super();
}
// 对外提供 类名.方法(User1.getInstance())来获取实例
public static User1 getInstance() {
return u1;
}
}
/**
* 饿汉式的 变种
*
* @author fjf
*
*/
class User2 {
private static User2 u2;
static {
u2 = new User2();
}
// 构造函数 私有化
private User2() {
super();
}
// 对外提供 类名.方法(User2.getInstance())来获取实例
public static User2 getInstance() {
return u2;
}
}
/**
* 懒汉式 在类加载时不初始化。 使用的时候在加载 线程不安全
*/
class User3 {
private static User3 u3;
// 构造函数 私有化
private User3() {
super();
}
// 对外提供 类名.方法(User3.getInstance())来获取实例
public static User3 getInstance() {
if (null != u3) {
u3 = new User3();
}
return u3;
}
}
/**
* 懒汉式 在类加载时不初始化。 使用的时候在加载 线程 安全 加了锁后 效率低点
*/
class User4 {
private static User4 u4;
// 构造函数 私有化
private User4() {
super();
}
// 对外提供 类名.方法(User3.getInstance())来获取实例
public static synchronized User4 getInstance() {
if (null != u4) {
u4 = new User4();
}
return u4;
}
}