黑马程序员_设计模式

本文介绍了单例模式的两种实现方式:饿汉式和懒汉式,并讨论了线程安全问题及解决方案。此外,还阐述了享元设计模式的概念,通过实例展示了如何利用享元模式提高内存效率。

                                      ------- 物联云培训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;

总结:享元设计模式就是将长期会使用到的小数据建立在内存中,当在有程序或函数调用到时直接从内存中取出,不在新创建对象。类似于数据共享。

 

 


                                      ------- 物联云培训java培训、期待与您交流! ----------  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值