研磨设计模式--单例模式-内部类

转载 2013年12月03日 10:53:59
 * 上面的单例实现存在小小的缺陷,那么 有没有一种方法,既能够实现延迟加载,又能够
 * 实现线程安全呢?
       还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initialization
 * holder class 模式,这个模式综合使用了java的类级内部类和多线程缺省同步锁的知识,
 * 很巧妙的同时实现了延迟加载和线程安全。
 *
 *
 * 1 相应的基础知识
  (1)什么是类级内部类?
   简单点说,类级内部类指的是,有static修饰的成员内部类。如果没有static修饰的成员式内
   部类被称为对象级内部类。
   (2)类级内部类相当于其外部类的static成分,它的对象与外部类对象间不存在依赖关系,因此
   可以直接创建。而对象级内部类的实例,是绑定在外部对象实例中的。
   (3)类级内部类中,可以定义静态的方法。在静态方法中只能引用外部类中的静态成员方法或变量。
   (4)类级内部类相当于其外部类的成员,只有在第一次被使用的时候才会被装载。
  
   多线程缺省同步锁的知识:
   大家都知道,在多线程开发中,为了解决并发问题,主要是通过使用synchronized来加互斥锁进行同步控制,
   但是在某些情况下,JVM已经隐含的为您执行了同步,这些情况下就不用自己再来进行同步控制了。
   这些情况包括:
   (1)由静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时
   (2)访问final字段时
   (3)在创建线程之前创建对象时
   (4)线程可以看见它将要处理的对象时
  
  
   2 解决方案的思路
        要想很简单的实现线程安全,可以采用静态初始化器的方式,它可以由JVM来保证线程的
   安全性。比如前面的饿汉式实现方式。但是这样一来,不是会浪费一定的空间吗?因为这种
   实现方式,会在类装载的时候就初始化对象,不管你需不需要。
        如果现在有一种方法能够让类装载的时候不去初始化对象,那不就解决问题了?一种可行的
   方式就是采用类级内部类,在这个类级内部类里面去创建对象实例。这样一来,只要不使用到这个类级内部类,

   那就不会创建对象实例,从而同步实现延迟加载和线程安全。


public class Singleton_InnerClass {
        
 private static class SingletonHolder{
  //静态初始化器,由JVM来保证线程安全
  private static Singleton_InnerClass instance=new Singleton_InnerClass();
 }
 
 //私有化构造方法
 private Singleton_InnerClass(){
  
 }
 
 public static Singleton_InnerClass getInstance(){
  return SingletonHolder.instance;
 }
}


研磨设计模式之简单工厂模式(模式讲解)

3.1  典型疑问        首先来解决一个常见的疑问:可能有朋友会认为,上面示例中的简单工厂看起来不就是把客户端里面的“new Impl()”移动到简单工厂里面吗?不还是一样通过new...
  • idwtwt
  • idwtwt
  • 2014年09月29日 11:51
  • 275

研磨设计模式 之 装饰模式(Decorator)1——跟着cc学设计系列

22.1  场景问题 22.1.1  复杂的奖金计算        考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,...
  • u013019926
  • u013019926
  • 2013年12月05日 10:10
  • 676

研磨设计模式之简单工厂模式

定义:提供一个创建对象实例的功能,而无需关心其具体的实现,被创建的实例的类型可以是接口,抽象类,也可以是具体的类。 简单工厂的结构: Api:定义客户所需要的功能接口。 ...
  • qq924862077
  • qq924862077
  • 2016年10月09日 09:18
  • 551

内部类的单例模式

* 上面的单例实现存在小小的缺陷,那么 有没有一种方法,既能够实现延迟加载,又能够  * 实现线程安全呢?  *       还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initial...
  • ygl6150373
  • ygl6150373
  • 2016年11月20日 16:39
  • 863

《研磨设计模式》 与 《设计模式之禅》对比

已经读完了《研磨设计模式》,正在读《设计模式之禅》,已经读了20%,两本书对比如下: 1. 两本书都是好书,推荐给编写过几年Java程序的同学 2. 若你时间少,可以先读薄一些的《设计模式之禅》,...
  • bwwlpnn
  • bwwlpnn
  • 2012年03月30日 23:41
  • 2172

AD-DA

转帖于 http://blog.csdn.net/levension/archive/2007/02/27/1515756.aspx1. AD转换器的分类     下面简要介绍常用的几种类型的基本原理...
  • kingrfo
  • kingrfo
  • 2011年05月28日 17:43
  • 641

研磨设计模式 之 访问者模式(Visitor)3——跟着cc学设计系列

25.3  模式讲解 25.3.1  认识访问者模式 (1)访问者的功能        访问者模式能给一系列对象,透明的添加新功能。从而避免在维护期间,对这一系列对象进行修改,而且还能变相实现复...
  • uyehgdhg
  • uyehgdhg
  • 2014年01月10日 14:16
  • 449

Java四种单例设计模式

Java中的四种单例模式单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。1.饿汉式单例模式public class Singleton{ private static S...
  • twocold_2010
  • twocold_2010
  • 2016年11月20日 15:13
  • 276

最安全的单例模式--java使用内部类实现单例模式

实现类 public class Singleton {     private static class LazyHolder {            private static fina...
  • qq_22912803
  • qq_22912803
  • 2016年10月10日 12:57
  • 5360

研磨设计模式之适配器模式(Adapter)-场景问题

4.1  场景问题 4.1.1  装配电脑的例子 1:旧的硬盘和电源 小李有一台老的台式电脑,硬盘实在是太小了,仅仅40GB,但是除了这个问题外,整机性能还不错,废弃不用太可惜了,于...
  • idwtwt
  • idwtwt
  • 2014年09月29日 15:53
  • 464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:研磨设计模式--单例模式-内部类
举报原因:
原因补充:

(最多只允许输入30个字)