关于Java中的单例模式

Java作为一个优秀的编程语言,自然能解决许许多多的实际问题,为了高效的解决某一类问题就需要引入设计模式的概念。Java中一共涉及到23中设计模式。下面为大家讲述一种常用的设计模式-----单例模式。


java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
  单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。


下面为大家贴上一个简单的例子,帮助大家梳理下思路,我以车间生产车辆实际问题为例


 * @author 谢栋
 * @data 2016年12月1日 下午7:59:00
 */
public class SingleDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		CarFactory car1 = CarFactory.getInstance();   //得到一个CarFactory对象
		
		car1.getCount();
		car1.getCount();
		car1.getCount();
		car1.getCount();
		
		
		CarFactory car2 = CarFactory.getInstance();   得到另一个CarFactory对象
		
		car2.getCount();
		car2.getCount();
		car2.getCount();

	}

}


/**
 * 模拟车间流水线生产车的单例模式
 */
class CarFactory{
	private static CarFactory car = new CarFactory();
	private int count=0;  //标记生产车的编号
	
	//构造函数私有化,使CarFactory不能被new利用构造函数创建出来,防止实例被重复创建,保证单例
	private CarFactory(){}
	
	public static CarFactory getInstance(){
		return car;
	}
	
	public void getCount(){
		count++;
		System.out.println("已经生产了    "+count+"  辆车");
	}
}








/**
 *  饿汉式(开发过程建议使用)
 *  每次都会实例化一个对象
 */
class Single {
	
	private static Single s =new Single();   //每次都是实例化对象
	
	//为了保证在内存中只创建一个实例,构造方法私有化
	private Single (){}
	
	public static Single getInstance(){
		
		return s;
	}
}

/**
 * 懒汉式(多线程时会产生问题)
 */
class Single2{
	
	private static Single2 s2;  
	private Single2(){}
	
	//当内存中不存在该实例时才会创建
	public static Single2 getInstance(){
		if(s2==null)
			s2=new Single2();
		return s2;
		
	}
}

控制台显示:

已经生产了    1  辆车
已经生产了    2  辆车
已经生产了    3  辆车
已经生产了    4  辆车
已经生产了    5  辆车
已经生产了    6  辆车
已经生产了    7  辆车
  

在main方法中虽然是创建了两个对象CarFactory对象,但是由于是单例模式,所以生产的车的编号仍然是编号从1-7号,到此也验证了单例模式的可行性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值