java设计模式---单例模式

类型:创建模式

定义:

        单例模式负责创建一个对象,并且要保证只创建了一个对象。这个类提供了一种方法来访问它的唯一对象,可以直接访问,而不需要实例化类的对象。

一、特点:

          1、单例类最多只能创建一个实例。 
          2、单例类必须自己创建自己的唯一实例。 

        3、单例类必须给所有其他对象提供对这一实例访问和操作方法。

二、应用场景:

        在项目中,有些对象我们只需要一个,比如配置文件、工具类、线程池、日志对象等,如果使用多个对象会导致系统资源浪费等问题,这时候,就可以使用单例模式设计程序,系统中的单例类最多只能被创建一个实例。

三、实现方法:

        常用的单例模式有懒汉模式和饿汉模式等。

        首先,想要保证单例类只能创建一个实例,就要保证外界对象不能访问到该类的构造器,所以需要私有化构造函数。

        1.饿汉模式

/**
 * 饿汉单例模式
 * 在加载类文件的时候,对象就被创建,所以称为饿汉单例
 * 特点:加载类时较慢,但是运行时获取对象会比较快,且是线程安全的
 */
public class EagerlySingleton {
	//1.构造函数私有化,防止外界直接创建对象,不考虑反射机制
	private EagerlySingleton() {
	}
	//2.自己创建实例,静态属性,在加载class文件时创建对象
	private static EagerlySingleton singleton = new EagerlySingleton();
	//3.提供一个用户获取实例的方法
	public static EagerlySingleton getInstance() {
		return singleton;
	}
}

        2.懒汉模式

/**
 * 懒汉单例模式
 * 特别:加载类时较快,但是运行时获取对象时会慢,线程不安全
 */
public class LazySingleton {
	// 1.构造函数私有化,防止外界直接创建对象
	private LazySingleton() {
	}
	// 2.自己创建实例,静态属性,在加载class文件时创建对象
	private static LazySingleton singleton;
	// 3.提供一个用户获取实例的方法
	public static LazySingleton getInstance() {
		if(singleton==null) {
			singleton=new LazySingleton();
		}
		return singleton;
	}
	//通过在方法加synchronized关键字保证线程安全,但是影响性能
	public static synchronized  LazySingleton getInstance1() {
		if(singleton==null) {
			singleton=new LazySingleton();
		}
		return singleton;
	}
	//双重检查锁定
	public static LazySingleton getInstance2() {
		if(singleton==null) {
			synchronized (LazySingleton.class) { 
				if(singleton==null)
				singleton=new LazySingleton();
			}
		}
		return singleton;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值