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单例模式的使用情景
分享到:
相关推荐
1.模式定义/应用场景/类图分析 2.字节码知识/字节码指令重排序 3.类加载机制 4.JVM序列化机制 5.单例模式在Spring框架 & JDK源码中的应用
│ 3.4单例模式中的饿汉实现和选择问题.mp4 │ 3.5JDK源码里面的单例设计模式.mp4 │ 4.2电商支付应用案例-简单工厂模式实践指南.mp4 │ 5.1-创建型设计模式-Prototype原型设计模式实战《上》.mp4 │ 5.2-创建...
23种设计模式在JDK中的应用。包含 原型模式 工厂模式 抽象工厂 创建者模式 单例模式,讲解加示例代码。
观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...
不让第二步和第三步重排序-DoubleCheck方案二:基于类初始化-静态内部类饿汉式饿汉式与懒汉式最大区别序列化破坏单例模式原理枚举单例基于容器的单例模式基于TreadLocal线程单例源码分析-JDK源码分析-spring其他相关...
97.请列举出在 JDK 中几个常用的设计模式? 98.什么是设计模式?你是否在你的代码里面使用过任何设计模式? 99.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式 100.在 Java 中,什么叫观察者设计模式...
行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器...
请叫我大师兄 Java Note ...单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 结构型模式 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Fi
单例模式 Singleton pattern 工厂方法模式 Factory method model 抽象工厂模式 Abstract factory model 模板方法模式 Template method pattern 建造者模式 Builder model 适配器模式 Adapter mode 装饰模式 ...
设计模式1(单例,工厂) 设计模式2(观察者,适配器) 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,是解决特定问题的一系列...
优惠记录申请Java开发工程师的学习资料演示死锁螺纹池不安全集合类volatile特性线程安全单例模式CAS应用ABA问题信号倒数计时循环屏障阿里巴巴java开发手册阿里官方发布1000道互联网大厂Java工程师面试题源码学院发布...
创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,外观模式,转换器模式,组合模式,享元模式。 行为类型模式,共十种:...
:hot_beverage: 用Java实现的设计模式〜 配套博客学习笔记: ://yubuntu0109.github.io/tags/design-and-pattern/ 参考书籍(推荐): 《Java设计模式 - 刘伟》 , 《图解设计模式 - [日]... :check_mark:单例模式( S
单例模式 行为模式 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 设计案例 UML 架构 系统架构能力 基本理论 扩展性...
3. 用Java实现的各种设计模式 单例模式(饿汉式、懒汉式) 4. Linux的基础知识 Linux下的进程 Linux定时任务调度 Linux的七个运行级别 Linux进程启动顺序 深入理解Linux下的守护进程 理解Linux配置文件 下一阶段更新...
更新设计模式 行为模式 命令模式 状态模式 观察者模式 中介者模式 2018.08.09 更新设计模式 结构型模式 适配器模式 桥接模式, 装饰模式, 外观模式, 享元模式, 代理模式。行为型模式的策略模式。 2018.08.08 更新...
8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. 2 格式化数字 3. 3 数字的舍入 3. 4 转换数字的进制 3. 5 生成随机数 ...
目录 一、 JavaSE 部分 ...九、 设计模式 1、 结构型模式 ①代理模式 ②装饰模式 ③适配器模式 2、 创建型模式 ①单例模式 3、 行为型模式 ①策略模式 ②观察者模式 4、 所有模式汇总 十、 场景题 十一、 UML
学习设计模式 这是Eclipse的Java Project 单例模式 喜欢作者最后的总结: 代码没有一劳永逸的写法,只有在特定条件下最合适的写法。在不同的平台,不同的开发环境(尤其是jdk版本)下,自然有不同的最优解(或者说较...
5并行模式与算法 5.1探讨单例模式 5.3生产者-消费者模式 5.5future模式 5.2不变模式 5.4高性能的生产者-消费者模式:无锁的实现 5.6并行流水线 01 02 03 04 05 06 实战Java高并发程序设计(第2版)PPT模板全文共25...