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中的设计模式 设计模式是在软件开发过程中总结出来的最佳实践,它们可以帮助开发者解决常见的问题并提高代码的可维护性和可扩展性。Java Development Kit (JDK) 中包含了许多设计模式的应用实例,这些实例...
6. **单例模式在Spring框架和JDK源码中的应用**: Spring框架中的`ApplicationContext`就是一个典型的单例模式应用,保证在整个应用程序中只有一个`ApplicationContext`实例。在JDK中,`java.lang.Runtime`类也是一...
【设计模式概述】 设计模式是软件工程中经过实践...学习JDK中的设计模式可以让我们更好地理解Java库的设计思想,提升编程技巧,同时也能帮助我们更有效地运用这些模式到自己的项目中,编写出高质量、易于维护的代码。
│ 3.4单例模式中的饿汉实现和选择问题.mp4 │ 3.5JDK源码里面的单例设计模式.mp4 │ 4.2电商支付应用案例-简单工厂模式实践指南.mp4 │ 5.1-创建型设计模式-Prototype原型设计模式实战《上》.mp4 │ 5.2-创建...
这些模式被广泛应用于Java等面向对象语言中,JDK(Java Development Kit)本身就是一个很好的实践场所,因为它包含了大量使用这些设计模式的例子。下面我们将详细探讨JDK中的23个设计模式及其应用。 1. 单例模式...
单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例...
总的来说,设计模式和JDK源码的结合学习,不仅能够帮助我们理解设计模式的理论知识,还能让我们看到这些模式在实际系统中的应用,从而提升我们的编程能力和软件设计水平。在日常开发中,我们应该积极应用设计模式,...
JDK中许多类和方法都使用了设计模式,这些模式的应用帮助实现了代码的高内聚、低耦合,提高了代码的可维护性和扩展性。下面介绍几种常见的设计模式及其在JDK中的应用实例: a) 抽象工厂模式(AbstractFactory) ...
内容概要:本文深入浅出地介绍了Java中最常见的8种设计模式:单例模式、工厂模式、策略模式、代理模式、观察者模式、装饰器模式、模板方法模式和建造者模式。每种设计模式都有具体的工作场景应用和实战代码案例,并...
设计模式是软件工程中的重要概念,它们是解决常见问题的最佳实践,是经验的结晶。 1. 工厂模式:这是最基础的设计模式之一,用于创建对象,它提供了一种封装对象创建过程的方法,使得具体创建哪个对象的决定可以在...
在给定的标签中,“java”表明我们关注的是Java语言中的设计模式应用,“设计模式”则涵盖了一系列如单例、工厂、观察者等经典模式。“类图”则是UML(统一建模语言)的一部分,用于图形化表示类与类之间的关系,...
单例模式是一种常见的设计模式,属于创建型模式之一。这种模式的核心在于确保某个类只有一个实例存在,并且提供一个全局访问点来获取该实例。单例模式在Java开发中尤其常见,因为它能够帮助开发者控制对象的创建过程...
- `DiscountStyle`接口及其几个实现类(`DiscountStyleOne`、`DiscountStyleTwo`、`DiscountStyleThree`)的代码片段,显示了设计模式中接口和实现类的用法,这里主要体现了策略模式,允许在运行时选择算法的行为。...
2. **方法区中的类静态属性引用的对象**:如上文所述,单例模式中的静态成员变量即属于此类。 3. **方法区中的常量引用的对象**:如字符串常量池中的字符串。 4. **本地方法栈中JNI的引用的对象**:通过JNI接口与...
Java JDK广泛运用了多种设计模式,如单例模式、工厂模式、装饰器模式、适配器模式等。这些模式的运用使得JDK库更加灵活且易于维护。 面向对象设计原则包括开闭原则(对扩展开放,对修改关闭)、依赖倒转原则(依赖...
- **GoF设计模式**主要包括创建型模式、结构型模式和行为型模式三大类,如单例模式、工厂模式、适配器模式等。 - 这些模式广泛应用于软件开发中,帮助开发者解决常见问题,提高代码的复用性和可维护性。 #### 2. ...
本主题将深入探讨JDK中的重要工具、JVM(Java Virtual Machine)的垃圾回收机制以及23种经典的设计模式。 首先,JDK工具介绍: 1. `javac`:这是Java的编译器,用于将源代码编译成可执行的字节码。 2. `java`:这个...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。这23种设计模式被广泛应用于构建可维护、可扩展和可复用的软件系统。每一种模式都提供了在面向对象设计中处理特定问题...