设计模式——>单例模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40301026/article/details/88529986

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

设计步骤:

1.私有构造器

2.提供私有的静态属性

3.提供一个静态的共有方法去访问静态属性。

单例模式的优点:

1、内存中只有一个实例,减少内存开支,特别是在频繁创建对象时。

2、内存中只有一个实例,减少性能开销,特别是在一个对象产生需要较多资源开销。

3、避免对资源的多用占用。

扫描二维码关注公众号,回复: 5756090 查看本文章

4、可以在系统设置全局访问点,优化和共享资源访问。

单例模式的缺点:

1、一般没有接口,扩展困难。

2、对测试不利,单例类必须完成后才可以测试。

3、与单一职责原则冲突。

单例模式的使用场景:

1、要求生成唯一序列号的环境。

2、整个项目中需要一个共享访问点或共享数据。

3、创建一个对象消耗的资源过多。

4、需要大量的静态常量和静态方法的环境。

其实现主要有两种模式:

1.懒汉式

    1.1懒汉式,线程不安全

package cn.liu.syn;

public class Singleton {
	//私有构造器
	private Singleton(){}
	//私有静态方法
	private static Singleton instance;
	//共有的静态方法
	public static Singleton getInstance() {
		if(null == instance) {
			instance = new Singleton();
		}
		return instance;
	} 
}

 1.2懒汉式,线程安全

package cn.liu.syn;

public class Singleton {
	//私有构造器
	private Singleton(){}
	//私有静态方法
	private static Singleton instance;
	//共有的静态方法
	public static synchronized Singleton getInstance() {
		if(null == instance) {
			instance = new Singleton();
		}
		return instance;
	} 
}

1.3懒汉式,双检锁/双重校验锁(DCL,即 double-checked locking)

package cn.liu.syn;


	//静态属性 没有volatile,可能访问到一个没有初始化的对象
	private volatile static DoubleCheckedLocking instance;
	//私有构造器
	private DoubleCheckedLocking(){}
	//提供公共的静态方法
	public static DoubleCheckedLocking getinstance() {
		if(instance!=null) {//已存在对象,避免不必要的同步。
			return instance;
		}
		//线程安全
		synchronized (DoubleCheckedLocking.class) {
			if(null == instance) {
				instance = new DoubleCheckedLocking();
			}
			return instance;
		}
	}
}

2.饿汉式,线程安全

package cn.liu.syn;

public class Singleton {
	//私有构造器
	private Singleton(){}
	//私有静态方法
	private static Singleton instance = new Singleton();
	//共有的静态方法
	public static synchronized Singleton getInstance() {
		return instance;
	} 
}

猜你喜欢

转载自blog.csdn.net/qq_40301026/article/details/88529986
今日推荐