Java设计模式之【单例模式】
Java设计模式之【单例模式】
何为单例
在应用的生存周期中,一个类的实例有且仅有一个
当在一些业务中需要规定某个类的实例有且仅有一个时,就可以用单例模式
比如spring容器默认初始化的实例就是单例的
单例如何实现
1、在类中定义私有的静态变量,类型为本类
2、构造器私有化
3、获取单实例的共有静态方法
代码
一、懒加载模式
public class Component {
/**
* 定义私有的静态变量来存放本类的单实例
* 私有保证外部无法直接获取本实例
* 静态保证本实例不会被回收
*/
private static Component component;
private Component(){} //构造器私有化,保证外部无法生成本类的实例,只能在本类中创建实例
/**
* 公共的静态同步方法用来获取本类的单实例
* 保证线程安全(只有一个实例)
* 延迟加载单实例,在第一次调用时才初始化本实例
* @return
*/
public static synchronized Component getInstance(){
if(component == null)
component = new Component();
return component;
}
}
二、积极加载模式
public class Component {
private static Component component = new Component(); //在类加载的时候就初始化本实例
private Component(){} //构造器私有化保证只能在类内部创建本实例
public static Component getInstance(){
return component;
}
}
三、双重判断加锁模式
public class Component {
private static Component component;
private Component(){}
/**
* 双重判断加锁机制
* @return
*/
public static Component getInstance(){
if(component == null){
synchronized (Component.class){
if(component == null)
component = new Component();
}
}
return component;
}
}
在懒加载模式中,每次获取实例都要加锁,这会使程序运行速度变慢,通过双重判断加锁机制可以解决这个问题
方法本身不加锁,进入方法之后先判断实例是否存在,如果存在就直接返回了,这里是多线程的
如果不存在,往下走就加锁变单线程了,但是在进入同步块中还要进行一次判断
关于单例模式这篇博客讲得很好:https://www.cnblogs.com/V1haoge/p/6510196.html
Java设计模式之【单例模式】的更多相关文章
- java 设计模式之单例模式
-------Success is getting what you want, happiness is wanting what you get. java设计模式之单例模式(Singleton) ...
- 折腾Java设计模式之单例模式
博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...
- Java设计模式之单例模式(七种写法)
Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...
- Java 设计模式之单例模式(一)
原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...
- java设计模式1——单例模式
java设计模式1--单例模式 1.单例模式介绍 1.1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 1.2.常见场景 1.3.单例模式的优点 1.4.常见的五种单例模式实现 ...
- java设计模式之单例模式你真的会了吗?(懒汉式篇)
java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- java设计模式- (1)单例模式
参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...
- [转]JAVA设计模式之单例模式
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...
- java设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
随机推荐
- 二进制转化为十进制Java实现
二进制转化为十进制 ①按权展开方法Java实现 /* * 按权展开法 */ public static double BinToTen1(String binary) { //查找该二进制是否存在小数 ...
- html头部标签大全
http://www.css88.com/archives/8052#table-index
- Vue, React, AngularJS, and Angular2. 我们对流行JavaScript框架们的选择
2017-08-04 前端大全 (点击上方公众号,可快速关注) 英文:ANTONI ZOLCIAK 译文:众成翻译 www.zcfy.cc/article/vue-react-angularjs-a ...
- Vue2.5开发去哪儿网App 首页开发
主页划 5 个组件,即 header icon swiper recommend weekend 一. header区域开发 1. 安装 stylus npm install stylus --s ...
- 遗忘Windows Server 2008R2密码的处理方法
遗忘Windows Server 2008R2的处理方法 有的时候,我们会由于各种原因忘掉了服务器密码,比如服务器太多,太杂什么的,或直接是被人黑掉了,这个时候我们想要登录,发现我们已经没有办法了,其 ...
- 坑爹的Sun JDK
Sun的这个java.lang.Throwable 源码 设计非常糟糕,完全没有扩展性, 我在IBM 的Java JDK下,继承java.lang.Throwable重新定义了一个ExceptionW ...
- android自定义控件 几种方式总结
方式1:不继承任何组件 , 直接在代码里面调用实例化.public class ProgressDialog { private Dialog dialog; public ProgressDialo ...
- Scala的Trait详解
http://article.yeeyan.org/view/178378/358355
- Python动态变量名定义与调用
动态变量名赋值 在使用tkinter时需要动态生成变量,如动态生成var1...var10变量 使用exec动态赋值 exec在python3中是内置函数,它支持python代码的动态执行. 示例: ...
- shell 终端terminfo命令 tput
tput命令 tput 可以更改终端功能,如移动或更改光标,更改文本属性,清除终端屏幕的特定区域等. 光标属性 在shell脚本或命令行中,可以利用tput命令改变光标属性. tput clear # ...