内容导航:
- 1、定义
- 2、使用场景
- 3、语法详解
- 3.1、定义唯一实例
- 3.2、自己创建唯一实例
- 3.3、全局访问方式
- 4、经典案例
- 4.1、饿汉单例
- 4.2、懒汉单例
1、定义
单例模式(Singleton Pattern)是最简单的设计模式之一,属于创建型模式,它提供了一种访问某个类“唯一实例(对象)”的绝佳方式,且可以直接访问,不需要再次实例化该类。
单例模式涉及到一个单一的类,该类负责创建自己的实例,同时确保只有单个实例被创建。通常情况下,该类在一个进程中只有一个实例,有些时候根据业务需要,在一个线程中只有一个实例,例如,仅线程上下文中使用同一个实例。因此,该类被称之为单例类,其唯一实例叫做单例。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
注意:
- 单例类有且只能有一个实例。
- 单例类必须自己创建唯一实例。
- 单例类必须提供访问唯一实例的全局方式。
2、使用场景
- Windows操作系统的任务管理器。
- 设备管理器
3、语法详解
3.1、定义唯一实例
private static EagerSingleton;
3.2、自己创建唯一实例
instance = new LazySingleton();
3.3、全局访问方式
public static LazySingleton getInstance() {
return instance ;
}
4、经典示例
3.1、饿汉单例
示例代码:
/**
* 饿汉单例 <br />
* 描述。
*
* @author AT阿宝哥, goldenunion@qq.com
* @version V1.0, 2016-09-02
* @see 无
* @since Algorithm
*/
public class EagerSingleton {
// Step1:声明单例
// 用自身声明并初始化一个static特性的实例
private static EagerSingleton instance = new EagerSingleton();
// Step3:构造器:默认的.私有的.
private EagerSingleton() {
System.out.println("我是一个饿汉单例...");
}
// Step2:方法:获取单例.
public static EagerSingleton getInstance() {
return instance;
}
}
测试代码:
/**
* 饿汉单例测试 <br />
* 描述。
*
* @author AT阿宝哥, goldenunion@qq.com
* @version V1.0, 2016-09-02
* @see 无
* @since Algorithm
*/
public class Client {
public static void main(String[] args) {
// 创建对象
EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();
EagerSingleton eagerSingleton2 = EagerSingleton.getInstance();
//测试相等性
System.out.println( eagerSingleton1 == eagerSingleton2);
//查看地址
System.out.println(eagerSingleton1);
System.out.println(eagerSingleton2);
}
}
运行结果:
我是一个饿汉单例...
true
com.company.project.singleton.demo01.EagerSingleton@7852e922
com.company.project.singleton.demo01.EagerSingleton@7852e922
3.2、懒汉单例
示例代码:
/**
* 懒汉单例 <br />
* 描述。
*
* @author AT阿宝哥, goldenunion@qq.com
* @version V1.0, 2016-09-02
* @see 无
* @since Algorithm
*/
//类:懒汉单例.
public class LazySingleton {
// 声明单例
private static LazySingleton instance;
// 构造器:默认的.私有的.
private LazySingleton() {
System.out.println("我是一个懒汉单例...");
}
// 方法:获取单例.
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
测试代码:
/**
* 懒汉单例测试 <br />
* 描述。
*
* @author AT阿宝哥, goldenunion@qq.com
* @version V1.0, 2016-09-02
* @see 无
* @since Algorithm
*/
public class Client {
public static void main(String[] args) {
// 创建对象
LazySingleton lazySingleton1 = LazySingleton.getInstance();
LazySingleton lazySingleton2 = LazySingleton.getInstance();
// 测试相等性
System.out.println(lazySingleton1 == lazySingleton2);
// 查看虚地址
System.out.println(lazySingleton1);
System.out.println(lazySingleton2);
}
}
运行结果:
我是一个懒汉单例...
true
com.company.project.singleton.demo02.LazySingleton@7852e922
com.company.project.singleton.demo02.LazySingleton@7852e922
持续更新,欢迎留名提议!
码字很累,多点赞多赞赏!