单利模式

闲的无聊,来写写Java设计模式,这次先写最简单的 单利模式,单利模式可能是很多程序员接触的第一个设计模式。因为单利模式谁也不知道到到底有多种写法,各有各的不同,在此我介绍我所知道的几种单利模式。

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例

饿汉模式

//懒汉,线程安全
public class Demo1 {
	private static Demo1 demo =new Demo1();
	public static Demo1 getDemo1(){
		return demo;
	};
	private Demo1(){}
}

​ 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

懒汉模式

​ 发现这两种方式的区别了吗?懒汉式也是通过一个类的静态变量实现的。但是并没有直接初始化。而是在函数getDemo2()中实例化的,也就是每次想用这个实例的时候初始化的,如果已经初始化了,那么就不用初始化了,这样也很好啊,对的,其实懒汉式是比较常用的实现方式。

//懒汉,安全(双重锁)
public class Demo2 {
private Demo2 demo2=null;
public Demo2 getDemo2(){
	if(demo2==null){
		synchronized(Demo2.class){
			if(demo2==null){
				demo2=new Demo2();
			}
		}
	}
	return demo2;
}
private Demo2(){}
}

枚举模式

//枚举 安全(推荐)
public enum Demo3 {  
INSTANCE;  
  public void whateverMethod() {  
  }  
}

这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。

静态内部类

//静态内部类  安全
public class Demo4 {
private static class getInstance{
	  private static Demo4 instance=new Demo4();
}
public static Demo4 getDemo4(){
	  return getInstance.instance;
}
private Demo4(){}
}

这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程.

转载于:https://my.oschina.net/yanhaohub/blog/3065903

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值