黑马程序员_单例模式

来源:互联网 发布:java线程超时关闭 编辑:程序博客网 时间:2024/06/05 17:26

----------------------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培训、期待与您交流! ----------------------

原创粉丝点击