`
kongweile
  • 浏览: 508315 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java设计模式学习系列之一:单例模式(Singleton)

    博客分类:
  • Java
 
阅读更多

单例模式(Singleton)
    1.介绍:也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
    2.实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
    3.注意事项:单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

    4.实现方式:通常单例模式在Java语言中,有两种构建方式:
       饿汉方式:指全局的单例实例在类装载时构建。(一般认为这种方式要更加安全些)
       懒汉方式:指全局的单例实例在第一次被使用时构建。 
   
    5.示例:
    
//------------------------------------------------------------------------------------//
package org.qiujy.test;
//方式一:饿汉式单例模式
public class Singleton1 {
 
 //构造方式设为private,外部不能访问
 private Singleton1() {
 }
 // 在自己内部定义自己的一个private实例,只供内部调用
 private static final Singleton1 instance = new Singleton1();
 // 提供了一个供外部访问本class的静态方法,可以直接访问
 public static Singleton1 getInstance() {
  return instance;
 }
}
//------------------------------------------------------------------------------------//
package org.qiujy.test;
//方式二:懒汉式单例模式
public class Singleton2 {
 
 private static Singleton2 instance = null;
 
 //这个synchronized很重要
 public static synchronized Singleton2 getInstance() {
  // 第一次使用时生成实例
  if (instance == null){
   instance = new Singleton2();
  }
  
  return instance;
 }
}
//------------------------------------------------------------------------------------//
Google公司的工程师Bob Lee写的新的懒汉单例模式
public class Singleton {    
   
  static class SingletonHolder {    
    static Singleton instance = new Singleton();    
  }    
   
  public static Singleton getInstance() {    
    return SingletonHolder.instance;    
  }    
   

  
在加载singleton时并不加载它的内部类SingletonHolder,而在调用getInstance()时调用SingletonHolder时才加载SingletonHolder,从而调用singleton的构造函数,实例化singleton,从而达到lazy loading的效果。

分享到:
评论

相关推荐

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    singleton_单例模式_java_设计模式_

    java设计模式,单例模式的不同实现方式

    Java面向对象(高级)- 单例(Singleton)设计模式

    Java面向对象(高级)-- 单例(Singleton)设计模式

    单例模式 Singleton Pattern

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    java 三种设计模式Demo 其中对单例模式做了详细的讲解,及性能和线程安全方面的优化其中Singleton.java为经典单例模式。

    java 设计模式 单例模式

    //单例模式,始终只产生一个对象 /*public class SingleTest { public static void main(String[] args) { SingleTon singleTon1=SingleTon.getInstance(); SingleTon singleTon2=SingleTon.getInstance(); ...

    JAVA设计模式23种

    设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4 4.建造者模式(Builder) 4 5. 原型模式...

    Design-Patterns-Singleton:单例设计模式示例

    这是单例设计模式的基本示例。 您将在此仓库中找到两个示例。 首先是线程安全的单例,其次不是。 测试的输出是: synchronizedTest Started... Thread 2 instance is : ...

    Java设计模式之单例模式及其应用

     Java中单例模式的定义是:一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。  优点:由于单例模式在内存中只有一个实例,减少了内存开支和系统的性能开销;单例模式可以避免对资源的多重占用。 ...

    单例设计模式.pdf

    单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    Java与模式

    实用的 java 设计原则 和 设计模式,阅读完本书,可以了解java的api背后的设计思想和理念。1000多页巨著,只有超值,没有之一。 第1章 模式的简史和形而上学 第2章 统一建模语言UML简介 第12章 简单工厂\(Simple ...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    单例模式Java实现

    单例模式是最简单的一种设计模式,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 本资源提供了用java语言实现简单的单例模式,供初学者参考

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    设计模式整理(很全)

    创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....

    Java设计模式之单态模式(Singleton模式)介绍

    主要介绍了Java设计模式之单态模式(Singleton模式)介绍,本文讲解了如何使用单例模式、使用单例模式注意事项等内容,需要的朋友可以参考下

    设计模式_单例模式.zip

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo

    Java设计模式单例模式(Singleton)用法解析

    主要介绍了Java设计模式单例模式(Singleton)用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics