Java学习之路:设计模式之单例模式

一、定义

一个类有且仅有一个实例,并且自行实例化向整个系统提供。

二、应用场景

  1. 创建对象时占用资源过多,但同时又需要用到该类对象。
  2. 对系统内资源要求统一读写,如读配置信息。
  3. 当多个实例存在可能引起程序逻辑错误,如号码生成器。

三、设计要点

  • 一个类只能有一个实例;
  • 必须自行创建实例;
  • 必须自行向整个系统提供这个实例。

四、实现方式

  • 只提供私有的构造方法;
  • 含有一个该类的静态私有对象;
  • 提供一个静态的公有方法用于创建、获取静态私有对象。

饿汉式

在声明对象的同时,直接进行初始化。(以空间换时间)

public class Singleton1 {
	
	// 创建类私有构造
	private Singleton1() {
		
	}
	
	// 创建该类型的私有静态实例
	private static Singleton1 singleton1 = new Singleton1();
	
	// 创建公有静态方法返回静态实例对象
	public static Singleton1 getSingleton1() {
		return singleton1;
	}
}

懒汉式

在声明对象的同时不进行初始化,直到调用的时候才进行初始化。(以时间换空间)

public class Singleton2 {
	// 创建类私有构造
	private Singleton2() {
		
	}
	
	// 创建该类型的私有静态实例
	private static Singleton2 singleton = null;
	
	// 创建公有静态方法返回静态实例对象
	public static Singleton2 getSingleton1() {
		if (singleton == null)
			singleton = new Singleton2();
		
		return singleton;
	}
}
饿汉式 懒汉式
以空间换时间 以时间换空间
线程安全 存在线程风险

五、优缺点

  • 优点:
    1. 在内存中只有一个对象,节省内存空间。
    2. 避免频繁的创建销毁对象,提高性能。
    3. 避免对共享资源的多重占用。
  • 缺点:
    1. 扩展比较困难。
    2. 如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失。

你可能感兴趣的:(Java)