`
eriol
  • 浏览: 401519 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Head First 设计模式--Singleton

阅读更多

chapter 5 --单件模式

                                  独一无二的对象

 

1. 如果我们不需要这个实例,它就永远不会产生,这就是“延迟实例化”。

 

2. 单件常被用来管理共享的资源,例如数据库连接或线程池。

 

3. 外界必须“请求”得到一个实例,而不是自行实例化得到一个实例。

 


单件模式:

确保一个类只有一个实例,并提供一个全局访问点

 

Singleton

Structure

这个uniqueInstance类变量持有唯一的单件实例。getInstance()方法是静态的,这意味着它是一个类方法,所以可以在代码的任何地方使用Singleton.getInstance()访问它。这和访问全局变量一样简单,只是多了一个优点:单件可以延迟实例化。单件模式的类也可以是一般的类,具有一般的数据和方法。

 

Singleton模式的代码:

 

public class Singleton {
    private static Singleton uniqueInstance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }

}
  

通过增加synchronized关键字到getInstance()方法中,我们迫使每个进程在进入这个方法之前,要先等候别的线程离开该方法。即不会有两个线程可以同时进入这个方法。

 

但是,只有第一次执行此方法时,才真正需要同步。一旦设置好uniqueInstance变量,实际上就不再需要同步这个方法了。之后的每次调用,同步都是一种累赘。可从使用以下来改善多线程的性能:

  • 如果getInstance()的性能对应用程序不是很关键,就什么都别做。
  • 使用“急切”创建实例,而不用延迟实例化的做法。
  • 用“双重检查加锁”,在getInstance()中减少使用同步。

双重检查加锁代码:

 

public class Singleton {
    private volatile static Singleton uniqueInstance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (uniqueInstance == null) {
            synchronized (Singleton.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
             }
         }
         return uniqueInstance;
    }
}

 volatile关键词确保,当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量。

 

 

本章小结:

  • 单件模式确保程序中一个类最多只有一个实例。
  • 单件模式也提供访问这个实例的全局点。
  • 在Java中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。
  • 确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,已解决多线程的问题。
  • 如果不是采用第五版的Java 2,双重检查加锁实现会失效。
  • 如果你使用多个类加载器,可能会导致单件失效而产生多个实例。
  • 如果使用JVM 1.2或之前的版本,你必须建立单件注册表,以免垃圾收集器将单件回收。
0
1
分享到:
评论

相关推荐

    head first 设计模式-设计模式必读

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    head first 设计模式

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First设计模式

    《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    HEAD FIRST设计模式

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First设计模式.pdf (高清)

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    HeadFirst 设计模式java源代码

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、...

    Head First 设计模式(中文版)

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    HeadFirst设计模式(中文版)

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First 设计模式 JAVA源码

    《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    Head First 设计模式

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    headfirst设计模式中文版pdf

    《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First设计模式(中文,无水印,完整版)

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。*后三章比较...

    [创建型模式] head first 设计模式之单件模式(Singleton)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/1927936

    Head First设计模式中文版及示例源码

    《Head First设计模式》作者Eric Freeman;ElElisabeth Freeman是作家、讲师和技术顾问。本书的产品设计应用神经生物学、认知科学,以及学习理论,这使得这本书能够将这些知识深深地印在你的脑海里,不容易被遗忘。...

    Head First设计模式官方源码

    第1章至第11章陆续介绍了设计模式:Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、TemplatMethod、Iterator、Composite、State、Proxy。

    Head First Design Patterns 英文版 Head First设计模式

    《Head First设计模式(中文版)》的产品设计应用神经生物学、认知科学,以及学习理论,这使得此书能够将这些知识深深地印在你的脑海里,不容易被遗忘。《Head First Design Patterns》的编写方式采用引导式教学,不...

    Head First 设计模式(中文完整版+附书源码)part1

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。最后三章比较...

    大优惠Head First 设计模式

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

Global site tag (gtag.js) - Google Analytics