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

JDK中的设计模式之单例模式

 
阅读更多

1JDK中单例模式的体现

首先看一下一段JDK 源码中的Runtime类的一段代码

public class Runtime {
    private static Runtime currentRuntime = new Runtime();
    public static Runtime getRuntime() { 
	return currentRuntime;
    }
    private Runtime() {}
 }

从这段代码中我们能看出来每个java应用程序在在什么情况下运行,都会有一个唯一的Runtime实例对象 通过调用静态方法getRuntime()来获得这个唯一的实例,而且Runtime的构造方法是私有的,该Runtime持有对自己的引用,这就是最简单的一种设计模式单例模式啦,相信大家在面试的过程中会经常被问到你最熟悉的设计模式是什么,它在什么地方有所体现,相信这可以使一个好的回答了。

2 单例模式


通过上面的实例可以看出单例类具备以下几个特点:

  • 单例类只能有一个实例
  • 单例类必须自行创建这个实例
  • 单例类必须自行向整个系统提供这个实例


3饿汉式单例模式

在本文最开始的那段代码就是饿汉式单例模式的一个体现,在java语言中通常用到的都是饿汉式单例,下面给出饿汉式单例的通用代码:

public class Singleton {
	private static Singleton singleton = new Singleton() ;
	private Singleton(){}
	public static Singleton getInstance(){
		return singleton;
	}
}
下面写个测试,通过getInstance()获得两个Signgleton对象,判断是否相等

Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s2==s1);

从打印的结果为true我们看以看出s1与s2连个实例是同一个对象。 之所以被称作是饿汉式单例,从上面也可以看出,这个Singleton类被加载时,静态变量singleton就会被初始化,此时Singleton类的私有构造函数就会被调用在此时单例类的实例就被创建出来了,看来确实够饿的,在类加载时就把实例唯一的实例创建出来

4懒汉式单例模式

  与饿汉式单例不同的是,懒汉式单例在第一次引用时将单例的实例创建出来,他们的相同之处就是类的够着函数都是私有的,下面看下懒汉式单例的代码实现:
public class Singleton {
	private static Singleton singleton;
	private Singleton(){}
	public static Singleton getInstance(){
		if(singleton ==null){
			singleton = new Singleton();
		 }
		return singleton;
	}
}
同样测试,看以可出创建的实例也是同一个
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s2==s1);

5饿汉式单例和懒汉式单例的比较

  从上述两端代码中也可以看出,饿汉式单例在类加载时就创建了单例的实例,从资源利用的角度来看,肯定会比懒汉式单例差些,但是反观从时间和反应速度上,却比懒汉式单例好些,饿汉式单例更符合java语言的设计观点,在处可以参照《java与模式》,书中阐述了两种单例模式的比较,以及懒汉式单例在多线程首次同时引用此类时访问限制问题。

6讨论:单例模式的构造函数必须私有的吗?

7单例模式的使用情景
分享到:
评论

相关推荐

    设计模式-单例模式

    单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池或者配置管理等。 在Java中...

    JDK中的设计模式

    ### JDK中的设计模式 设计模式是在软件开发过程中总结出来的最佳实践,它们可以帮助开发者解决常见的问题并提高代码的可维护性和可扩展性。Java Development Kit (JDK) 中包含了许多设计模式的应用实例,这些实例...

    1.设计模式-单例设计模式1

    6. **单例模式在Spring框架和JDK源码中的应用**: Spring框架中的`ApplicationContext`就是一个典型的单例模式应用,保证在整个应用程序中只有一个`ApplicationContext`实例。在JDK中,`java.lang.Runtime`类也是一...

    jdk中设计模式

    【设计模式概述】 设计模式是软件工程中经过实践...学习JDK中的设计模式可以让我们更好地理解Java库的设计思想,提升编程技巧,同时也能帮助我们更有效地运用这些模式到自己的项目中,编写出高质量、易于维护的代码。

    小D深入浅出设计模式+框架源码剖析实战

    │ 3.4单例模式中的饿汉实现和选择问题.mp4 │ 3.5JDK源码里面的单例设计模式.mp4 │ 4.2电商支付应用案例-简单工厂模式实践指南.mp4 │ 5.1-创建型设计模式-Prototype原型设计模式实战《上》.mp4 │ 5.2-创建...

    JDK中有关23个经典设计模式的示例

    这些模式被广泛应用于Java等面向对象语言中,JDK(Java Development Kit)本身就是一个很好的实践场所,因为它包含了大量使用这些设计模式的例子。下面我们将详细探讨JDK中的23个设计模式及其应用。 1. 单例模式...

    单例模式各种实现方式

    单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例...

    设计模式实战、jdk源码|simple-demo.zip

    总的来说,设计模式和JDK源码的结合学习,不仅能够帮助我们理解设计模式的理论知识,还能让我们看到这些模式在实际系统中的应用,从而提升我们的编程能力和软件设计水平。在日常开发中,我们应该积极应用设计模式,...

    《Java设计模式》课后习题参考答案-刘伟(20180723).pdf

    JDK中许多类和方法都使用了设计模式,这些模式的应用帮助实现了代码的高内聚、低耦合,提高了代码的可维护性和扩展性。下面介绍几种常见的设计模式及其在JDK中的应用实例: a) 抽象工厂模式(AbstractFactory) ...

    [中文]Head-First设计模式.pdf

    设计模式是软件工程中的重要概念,它们是解决常见问题的最佳实践,是经验的结晶。 1. 工厂模式:这是最基础的设计模式之一,用于创建对象,它提供了一种封装对象创建过程的方法,使得具体创建哪个对象的决定可以在...

    设计模式源码与类图分析1

    在给定的标签中,“java”表明我们关注的是Java语言中的设计模式应用,“设计模式”则涵盖了一系列如单例、工厂、观察者等经典模式。“类图”则是UML(统一建模语言)的一部分,用于图形化表示类与类之间的关系,...

    单例模式 Singleton Pattern

    单例模式是一种常见的设计模式,属于创建型模式之一。这种模式的核心在于确保某个类只有一个实例存在,并且提供一个全局访问点来获取该实例。单例模式在Java开发中尤其常见,因为它能够帮助开发者控制对象的创建过程...

    设计模式大作业-蛋糕预定系统实验报告.pdf

    - `DiscountStyle`接口及其几个实现类(`DiscountStyleOne`、`DiscountStyleTwo`、`DiscountStyleThree`)的代码片段,显示了设计模式中接口和实现类的用法,这里主要体现了策略模式,允许在运行时选择算法的行为。...

    单例模式与垃圾回收机制

    2. **方法区中的类静态属性引用的对象**:如上文所述,单例模式中的静态成员变量即属于此类。 3. **方法区中的常量引用的对象**:如字符串常量池中的字符串。 4. **本地方法栈中JNI的引用的对象**:通过JNI接口与...

    java设计模式选择题复习题.pdf

    Java JDK广泛运用了多种设计模式,如单例模式、工厂模式、装饰器模式、适配器模式等。这些模式的运用使得JDK库更加灵活且易于维护。 面向对象设计原则包括开闭原则(对扩展开放,对修改关闭)、依赖倒转原则(依赖...

    侯捷 设计模式 课件

    - **GoF设计模式**主要包括创建型模式、结构型模式和行为型模式三大类,如单例模式、工厂模式、适配器模式等。 - 这些模式广泛应用于软件开发中,帮助开发者解决常见问题,提高代码的复用性和可维护性。 #### 2. ...

    jdk工具介绍JVM垃圾回收23种设计模式

    本主题将深入探讨JDK中的重要工具、JVM(Java Virtual Machine)的垃圾回收机制以及23种经典的设计模式。 首先,JDK工具介绍: 1. `javac`:这是Java的编译器,用于将源代码编译成可执行的字节码。 2. `java`:这个...

    java 23种设计模式的类图

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这23种设计模式被广泛应用于构建可维护、可扩展和可复用的软件系统。每一种模式都提供了在面向对象设计中处理特定问题...

    ( java设计模式.zip

    Java设计模式是软件工程中的一种最佳实践,它是一种在特定情境下解决常见问题的经验总结。设计模式并不是具体的代码或库,而是对在软件设计中反复出现的问题及其解决方案的描述。这些模式提供了可重用的解决方案,使...

Global site tag (gtag.js) - Google Analytics