单例模式

单例模式是一种常用的设计模式,它的核心结构是只包含一个被称为单例的特殊类。
**优点:**确保只有一个实例,节约资源(避免频繁创建实例销毁实例,或者实例消耗内存过于大,可以用单例先预先生实例,在后期使用时,加载速度就快了。)

**缺点:**没有抽象类,不易于拓展。不适用与变化的对象

单例模式的要素:
a.私有构造方法;
b.私有静态引用指向自己实例;
c.以自己实例为返回值的公有静态方法。

单例模式的几种分类:
1:饿汉式:单例实例在类装载时就构建,急切初始化。预先加载。线程安全。


public class test {
	private test() {
		System.out.println("你好");
	}
	private static test single=new test();
	public static test GetInstance() {
		return single;
	}
	
}

2:懒汉式:在第一次使用的时候构建,延迟加载。存在线程安全问题,可能会产生两个实例对象。

public class test{
	private test() {
		System.out.println("懒汉式");
	}
	
	private static test singleq=null;
	
	public static test getInstance() {
		if(singleq==null) {
			singleq=new test();
		}
		return singleq;
	}
}

3:完全同步方法:可以解决懒汉式线程不安全的问题,添加一个synchronized 关键字,

public static synchronized test getInstance() {
		if(singleq==null) {
			singleq=new test();
		}
		return singleq;
	}

4部分同步方法(也叫双重检测方法):可以解决懒汉式线程不安全的问题,在判断实例为空之后,在进入关键字代码块,再次判断,保证每次只有一个线程在执行关键字代码块里面创建实例的代码。核心思想是在方法getInstance内有些代码可并行运行,有些可以串行运行。

public static test getInstance() {
		if(singleq==null) {
			synchronized(test.class) {
				if(singleq==null) {
					singleq=new test();
				}
			}
		}
		return singleq;
	}

5静态内部类:程序第一次运行My.Single时,单例对象才动态生成。不执行getInstance方法,就不会被实例。优点是可以执行该类的其他静态方法也可以被执行。

public class test{
	public static class My{
		private static final test Single=new test();
	}
	
	private test() {
		System.out.println("静态内部类");
	}
	
	public static final test getInstance() {
		return My.Single;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值