首页 > 学院 > 开发设计 > 正文

设计模式 单例模式

2019-11-08 00:33:00
字体:
来源:转载
供稿:网友

转载地址:http://blog.csdn.net/lmj623565791/article/details/24468641

继续设计模式,这个模式用得应该很频繁啊,而且也比较简单,如果现在你还不能纸笔随手写个单例出来,你就得加油了哈~

直接介绍几种线程安全的且我觉得还比较不错的方式:

1、是不是号称恶汉,就是类加载就初始化了

[java] view plain copy 在CODE上查看代码片package com.zhy.pattern.singlton;    public class Singleton  {      PRivate static Singleton instance = new Singleton();            public static Singleton getInstance()      {          return instance ;      }  }  2、懒汉,我喜欢这种,需要双重判断

[java] view%20plain copy package com.zhy.pattern.singlton;      public class Singleton02  {      private static Singleton02 instance;        public static Singleton02 getInstance()      {          if (instance == null)          {              synchronized (Singleton02.class)              {                  if (instance == null)                  {                      instance = new Singleton02();                  }              }          }          return instance;      }  }  3、使用Java的枚举,还是很推荐的,简单的跟神马一样,如果对枚举不熟悉,小google一下

[java] view%20plain copy public enum Singleton03  {      INSTANCE;  }  4、使用一个持有类,主要是为了不在初始化的时候加载

[java] view%20plain copy 派生到我的代码片package com.zhy.pattern.singlton;    public class Singleton04  {      private static final class InstanceHolder      {          private static Singleton04 INSTANCE = new Singleton04();      }        public static Singleton04 getInstance()      {          return InstanceHolder.INSTANCE;      }  }  好了,就这么多,以上4种都是比较推荐使用的,除了第一种会类加载的时候初始化,其他3中都不会,且4种都保证线程安全,特殊情况(除了多个类加载器,和你非要通过反射等手段生成多个对象)不考虑。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表