设计模式(2)--Singleton(单例模式)--创建型
1.模式定义:
2.模式特点:
3.使用场景:
4.模式实现(八种方式):
(1)饿汉式(静态常量)[可用]
public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return INSTANCE; } }
(2)饿汉式(静态代码块)[可用]
public class Singleton { private static Singleton instance; static { instance = new Singleton(); } private Singleton() {} public Singleton getInstance() { return instance; } }
(3)懒汉式(线程不安全)[不可用]
public class Singleton { private static Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
(4)懒汉式(线程安全,同步方法)[不推荐用]
public class Singleton { private static Singleton singleton; private Singleton() {} public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
(5)懒汉式(线程安全,同步代码块)[不可用]
public class Singleton { private static Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { singleton = new Singleton(); } } return singleton; } }
(6)双重检查[推荐用]
public class Singleton { private static volatile Singleton singleton; private Singleton() {} public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
(7).静态内部类[推荐用]
public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonInstance.INSTANCE; } }
(8).枚举[推荐用]
public enum Singleton { INSTANCE; public void whateverMethod() { } }
5.优缺点:
(1)单例模式的优点:
(2)单例模式的缺点:
6.注意事项
7.相关问题
(1)单例模式的对象长时间不用会被jvm垃圾收集器收集吗
(2)在一个jvm中会出现多个单例吗
Class c = Class.forName(Singleton.class.getName()); Constructor ct = c.getDeclaredConstructor(); ct.setAccessible(true); Singleton singleton = (Singleton)ct.newInstance();
(3)懒汉式单例线程安全吗
(4)单例模式只有饿汉式和懒汉式两种吗
(5)单例类可以被继承吗
(6)饿汉式单例好还是懒汉式单例好
转载于:https://www.cnblogs.com/yysbolg/p/7380568.html
设计模式(2)--Singleton(单例模式)--创建型相关推荐
- 设计模式(二)—— 创建型模式
设计模式(二)-- 创建型模式 文章首发于 掘金 作者:MiyueFE 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 创建型模式,即处理对象创建过程的设计模式,根据实际情况来使 ...
- 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)
源地址:http://doc.chinaunix.net/python/200703/202210.shtml 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式 ...
- 《设计模式》读书笔记——创建型模式
设计模式 创建模式 定义: 创建型模式抽象了实例化过程.他们帮助一个系统独立于如何创建.组合和表示它的那些对象 一个类创建型模式使用继承改变被实例化的类,而一个对象创建模式是将实例化委托给另一个对象 ...
- Java设计模式(二)创建型设计模式
文章目录 三 创建型设计模式 3.1 单例设计模式 3.1.1 饿汉式(线程安全) 3.1.2 懒汉式(线程不安全) 3.1.3 优缺点 3.1.4 补充 3.1.5 框架中的使用 3.1.4.1 S ...
- Java设计模式学习1:创建型与结构型
设计模式介绍 首先要明白设计模式到底是什么,设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF) 的分类了,他们将设计模式分类为 23 种 ...
- JAVA设计模式第二讲:创建型设计模式
设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案.本文以面试题作为切入点,介绍了设计模式的常见问题.我们需要掌握各种设计模式的原理.实现.设计意图和应用场景, ...
- 设计模式(三)创建型模式
前言 根据菜鸟教程的目录,我们首先来看看创建型模式. 创建型模式研究: 实际应用中通常有哪些不同的创建对象的场景: 在不同的场景下,如何更好地编写创建对象的代码. 主要研究构造函数. 下面分别对创建型 ...
- 《设计模式详解》创建型模式 - 建造者模式
建造者模式 4.4 建造者模式 4.4.1 概述 4.4.2 结构 4.4.3 实例 4.4.4 优缺点 4.4.5 使用场景 4.4.6 扩展 - 构建对象 重构前 重构后 4.5 创建型模式对比 ...
- 《设计模式详解》创建型模式 - 原型模式
原型模式 4.3 原型模式 4.3.1 概述 4.3.2 结构 4.3.3 实现 4.3.4 案例 4.3.5 使用场景 4.3.6 扩展 - 深克隆 引用对象的浅克隆 实现 1:文件流 + 对象流 ...
最新文章
- 电视游戏会是未来客厅娱乐的主角吗?
- HTML:基本的标签
- 互逆的压缩与解压(洛谷P1319、P1320题题解,Java语言描述)
- 【redis】Redis简介
- 【每日算法Day 101】字节跳动 AI Lab 精选面试编程题
- bind9的初步使用(2)
- 利用R语言进行主成分分析的步骤
- Oracle 、SqlServer 根据日期逐日、逐月递增累加、逐行累加
- STM32学习笔记(一)
- 计划驱动的软件过程:waterfall model(瀑布模型,或称之为SDLC模型)
- Python制作专属有声小说(调用百度语音合成接口)
- == 和equals的比较
- channel通道的一些细节
- 使用 canvas 和面向对象思想绘制流星动画
- 可能不能吃的食物-为自己记录一下
- php warning require,Thinkphp 网站打开提示Warning: require(): open_basedir restriction in effect另一种解决方法...
- 华为董事会名单大曝光:孙亚芳任正非等13名董事
- TC---教学知识与能力
- 云计算统一办公运营平台服务能力设计方案
- 科全进销存系统单机永久免费版