------- 物联云培训、java培训、期待与您交流! ----------
单例模式就是指整个应用中只能存在一个实例。
所以构造函数应当私有化。
单例设计模式有两种创建方法:
第一种:饿汉式:在声明变量处实例化对象
class Single
{
privatestatic final Single s = new Single();
privateSingle(){}
publicstatic Single getInstance()
{
returns;
}
}
第二种:懒汉式:当需要实例对象的时候再去生成对象进行实例化
class Single
{
privatestatic Single s = null;
privateSingle(){}
publicstatic Single getInstance()
{
If(s==null)
s = new Single();
returns;
}
}
缺点:如果当线程刚执行完If(s==null)语句,该线程失去执行权,而另一个线程也运行该代码,判断s时也为空,创建了一个对象,第一个线程在运行时就又创建一个对象,不能保证单例了。
这时我们想到了锁。
class Single
{
privatestatic Single s = null;
privateSingle(){}
publicstatic Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
//--->A;
s= new Single();
}
}
returns;
}
}
总结:即便懒汉式能确保只创建一个对象,但是耗时太多,不如饿汉式方便。
享元设计模式:
概述:实际上就是有好多小的对象,他们有很多相同的属性,然后就把他变成一个对象使用,还有些不同的属性,作为方法参数传递,这种只创建对象的模式,就叫享元模式。
例子:比如说-128~127、a-z、A-Z,在一个字节内,一旦装箱后就会把它缓存起来,下次就可以直接从缓存中拿,这样就节省了空间,因为这些整数比较小,并且使用的频率比较高,这就是一种享元模式。
例如:Integer a=23;
Integer b=23;
a==b true
Integer a=137;
Integer b=137;
a==b false;
总结:享元设计模式就是将长期会使用到的小数据建立在内存中,当在有程序或函数调用到时直接从内存中取出,不在新创建对象。类似于数据共享。
本文介绍了单例模式的两种实现方式:饿汉式和懒汉式,并讨论了线程安全问题及解决方案。此外,还阐述了享元设计模式的概念,通过实例展示了如何利用享元模式提高内存效率。

790

被折叠的 条评论
为什么被折叠?



