黑马程序员_单例模式

----------------------android培训java培训、期待与您交流! ----------------------

老规矩先上代码:

class Single
{
        private static Single s = null;
        private Single(){}
        public static  Single getInstance()
        {
                if(s==null)
                {
                               
                }
                return s;
        }
}
2:
class Single
{
        private static Single s = null;
        private Single(){}
        public static synchronized  Single getInstance()
        {
                if(s==null)
                {
                       
                        s = new Single();
                }
                return s;
        }
}
3:
class Single
{
        private static Single s = null;
        private Single(){}
        public static Single getInstance()
        {
                if(s==null)
                {   
                       
                        synchronized(Single.class)
                        {                               
                                if(s==null)
                                       
                                        s = new Single();
                        }
                }
                return s;
        }
}

刚好论坛少有人问及此类问题,我就Ctrl+C一下,吼吼!!

单例模式基本上可以分两种-------(懒汉式、饿汉式)

那么何为单例模式呢??

定义:单例模式确保一个类只有一个实例,自行创建这个实例并向整个系统提供这个唯一的实例。

从定义上看单例模式有这么几个关键特性:

1、一个类只能有一个实例

2、类自己创建这个实例

3、整个系统公用这个实例

详细的分析在下面代码以注释的形式展示
.w3.org/1999/xhtml单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
        1,一个类只能有一个实例
        2,自己创建这个实例
        3,整个系统都要使用这个实例单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
        1,一个类只能有一个实例
        2,自己创建这个实例
        3,整个系统都要使用这个实例单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
        1,一个类只能有一个实例
        2,自己创建这个实例
        3,整个系统都要使用这个实例单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
        1,一个类只能有一个实例
        2,自己创建这个实例
        3,整个系统都要使用这个实例单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
        1,一个类只能有一个实例
        2,自己创建这个实例
        3,整个系统都要使用这个实例

1:饿汉式
//为何叫他饿汉式呢?因为不管它饿不饿,他都先做好一碗粥,(静态实例化对象)让大家感觉他天天都在饿着(o(∩_∩)o 哈哈,其实我感觉应该叫他勤汉式)
class Single
{
	private Single(){}//私有的构造函数,这是单例的基本保障,可以思考一下
        private static Single s = new Single();//在类的内部 构建一个静态对象,大家都知道,不管几个对象静态对象都至创建一次
        public static  Single getInstance()//对外提供一个接口,确保整个程序都得到统一对象
        {
                return s;
        }
}
2:懒汉式
//为何叫他懒汉式呢?因为除非他饿的不行了,他才会去做碗粥(调用getInstance()才创建对象,创建的时候还要确定来确定去,没见过这么懒的)
class Single
{
        private static Single s = null;
        private Single(){}
        public static synchronized  Single getInstance()
        {
                if(s==null)//判断实例是否存在,
                {
                       
                        s = new Single();
                }
                return s;
        }
}
3:懒汉安全版
//懒汉有一个BUG就是多线程在并发请求的时候不能保证单例的唯一,大家可以好好思考一下
class Single
{
        private static Single s = null;
        private Single(){}
        public static Single getInstance()
        {
                if(s==null)
                {   
                       
                        synchronized(Single.class)//这里加锁就可以有效的防止这个问题
                        {                               
                                if(s==null)
                                       
                                        s = new Single();
                        }
                }
                return s;
        }
}


 

----------------------android培训java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值