单例模式

单例模式

        在设计模式中最负盛名的一个模式,定义为:确保一个类中只有一个实例,并且自行实例化并向整个系统提供这个实例。它的意图是为了一个类有且仅有 这个实例,并为它提供了一个全局访问点。

单例模式分为饿汉模式和懒汉模式
    共同点:
    在类创建的同时就已经创建好一个静态对象供系统使用,并且以后不会在改变。
    不同点:
    饿汉模式---线程安全
    懒汉模式---在创建实例对象时不加上synchronized则会导致对象访问线程不安全。 

优势:
    实例数量设置为一个,有利于节省内存空间。
    可以为整个程序框架提供共享变量,最终提高代码的质量。
    减少Java的命名空间。
时机:
    当软件系统中多个程序只需要调用同一个实例对象时,
    无需修改客户端代码,既可以使用有一个子类扩展的实例时,
    系统性能需要进一步的优化时。
与struts:
    在Struts1的action中实行的是线程安全的单例模式,其action只能用一个实例来处理相关的全部请求,并且Struts1具备使所有模块均具备生命周期的功能。
    尤其要注意的是各个模块中的action要共享同一个生命周期。
    Struts2的action对象具备使所有请求都产生对应一个实例的功能。因而可以理解为非单例模式。
    为了便于理解,可以认为:Struts1 的数据不可以在action中编制,所以是单例模式,Struts2 的数据可以在action中编制,所以是非单例模式。

示例
饿汉式单例模式

public class JerrySingleton
{
	private static JerrySingleton jerrysingleton = new JerrySingleton();
	private JerrySingleton(){};
	public synchronized static JerrySingleton getJerrySingleton()
	{
		return jerrysingleton;
	}
}


懒汉式单例模式

<span style="font-size:18px;">public class JerrySingletonOne
{
	private static JerrySingletonOne jerrySingletonOne=null;
	private JerrySingletonOne(){};
	public static JerrySingletonOne getJerrySingletonOne()
	{
		synchronized(this)
		{
			if (jerrySingletonOne==null)
			{
				jerrySingletonOne = new JerrySingletonOne();
			}
		
		}
		return jerrySingletonOne;
	
	}


}</span>

小结:

    单例模式通过延迟实例化(只有在第一次使用它时才实例化),一个单例对象达到此目的的通用做法,而在多线程中,必须小心管理线程间的协作,因为它们访问
    单例对象方法和数据的时间,只在毫厘之差。
    对象具有唯一性,并不意味着使用了单例模式,单例模式通过隐藏了构造函数,通过对象创建的唯一入口点,从而将类的职责集中在类的单个实例中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值