基于Java从零开始实现设计模式(一)——单例模式

单例模式(singleton):每个类只允许一个实例,提供一个全局的访问点,即通过将其构造方法设计为private类型,使其无法通过new方法拿到其实例,只能通过类中定义的get方法拿到类的实例。其实现方案通常包括三种——懒汉式、饿汉式、final式,分析即实现如下:
1.:fina式
1.1 第一步:私有构造
1.2 第二步:定义公有静态成员类

package designPattern;

public class Demo01_SingletonFinal {

	public static void main(String [] args) {
		SingletonFinal singletonFinal =  SingletonFinal.s;
	}

}

class SingletonFinal{
	private SingletonFinal() {}
	
	public final static SingletonFinal s = new SingletonFinal();
}

2:饿汉式
2.1 第一步:私有构造
2.2 第二步:静态私有成员类
2.3 第三步:设置get

package designPattern;

public class Demo02_SingletonEH {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SingletonEH singletonEH = SingletonEH.getInstance();
	}

}


//单例设计模式之饿汉式
class SingletonEH{
	private SingletonEH() {}   //私有构造
	private static SingletonEH s = new SingletonEH(); //私有静态,保证不被修改
	public static SingletonEH getInstance() {
		return s;
	}
	
}

3 懒汉式:懒汉式与饿汉式区别在于懒汉式在类的开头不会对成-员对象进行赋值,换言之,不会占用内存,等到需要使用成员对象(调用get()方法)时,在对这个成员对象进行赋值;

package designPattern;

public class Demo03_SingletonLH {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SingletonLH singleton1 = SingletonLH.getInstance();
		SingletonLH singleton2 = SingletonLH.getInstance();
	}

}


//单例设计模式之饿汉式
class SingletonLH{
	private SingletonLH() {}   //私有构造
	private static SingletonLH s; //先不申请内存,等到使用时在进行申请
	public static SingletonLH getInstance() {
		if (s == null) {
			s = new SingletonLH();
		}
		return s;
	}
	
}

注:关于懒汉式与饿汉式区别:最大的区别在于多线程,懒汉式由于在第19-22行一直在操作s,当有多个线程时,可能存在第一个线程执行完19行时,CPU刚好切换至第二个线程,第二个线程也会执行至19行,进而创建两个SingletonLH对象,引发错误;其次一点区别在于懒汉式属于时间换空间,饿汉式属于时间换空间,故优先选择饿汉式;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值