java单例设计模式
单例模式的概念
单例类只有一个实例,并且只由自己创建,实例化后向整个系统提供自己的实例。
单例设计模式主要分为2种:懒汉式和饿汉式。2者的区别在于初始化的时间不同。
像线程池,缓存,日志等都被设计成单例模式;spring中所有的bean不设置作用域的话,默认都是单例模式。
这些单例类大多都是具有管理资源的用途。
饿汉式单例模式的实现
饿汉式单例模式在定义类的时候被实例化。
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
1.构造方法私有化,防止被外部实例化(虽然通过反射还是可以创建);
2.内部声明私有变量并实例化;
3.为外部提供访问该实例的静态方法。
懒汉式单例模式的实现
懒汉式单例模式在调用方法的时候才实例化。
public class Singleton {private Singleton() {}private static Singleton single=null;//静态工厂方法 这里加上同步锁,让这个方法不会同时被多个线程访问public static Singleton getInstance() {if (single == null) { single = new Singleton();} return single;} }
懒汉式的实现与之前的基本相同,只是实例化放在了方法内。
好处是消耗系统资源少。
坏处是它并不是同步的,如果在多线程下,可能被创建多个实例。因此在上面可以为方法加锁,保证同步。
转载于:https://www.cnblogs.com/xjx199403/p/10764281.html
java单例设计模式相关推荐
- java 单例设计模式 [
为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...
- java单例设计模式_Java设计模式之单例模式详解
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...
- java单例设计模式懒汉_Java设计模式之单例设计模式(懒汉、饿汉)
[toc] Java设计模式之单例设计模式(懒汉.饿汉) 相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试 ...
- Java单例设计模式(实现Java的一个类只有一个对象)
单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类. 核心便是希望一个类只有一个对象. 如何实现类在内存中只有一个对象呢? 第一步:构造私有: 第二步:本身提供 ...
- Java|深入研究Java单例设计模式
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 简介 看到标题可能有人会问什么是单例模式呢? 在程序设计过程中 ...
- java单例设计模式之懒汉式和饿汉式
单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的 ...
- JAVA单例设计模式简单实现(懒汉与恶汉),多例设计模式的简单实现
单例设计模式饿汉式 package Singleton; public class Singleton { private static final Singleton INSTANCE = new ...
- 探讨一下Java单例设计模式
所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. 1. ...
- java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
设计模式: 是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考和摸索.就像是经典的棋谱,不同的棋局,我们用不同的棋谱 俗称"套路&q ...
最新文章
- 强弩之末,势不能穿鲁缟
- 【机器学习】分类算法-K-近邻算法
- Jquery屏蔽回车键
- 【Linux分享】Linux常用命令+教程分享
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
- EXTJS 6 新特性(译文)
- Android 控件之 Date Time 组件
- JavaScript正则表达式 1
- 使用VC2005编译静态应用程序的方法
- html邮件签名制作,制作自己的个性化电子邮件签名
- CVPR2019/图像翻译:TransGaGa: Geometry-Aware Unsupervised Image-to-Image Translation几何感知的无监督图像到图像的翻译
- 贪吃蛇项目难还是2048难c语言,贪吃蛇大战2048好玩吗 贪吃蛇大战2048玩法简介
- X99主板2011-3接口E5 CPU一览表
- 记:css绘制小猪佩奇的项目及踩过的坑
- glew glfw opengl 之间的关系
- 石英晶振的特点及主要参数
- Suzy加油吧 Day 29 | 回溯算法进行中:491. 递增子序列,46 全排列,47 全排列2
- 最容易被人工智能取代的10种职业,今年换工作别入坑了!
- cocos2d-x 横板游戏触屏人物和背景移动 方法1
- 完善发现、培养、激励机制 全面增强科技人才活力|方格教育