Java设计模式之——单例模式
引自百度百科:
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式其实算一个比较容易理解的设计模式了,让我们来查看一个比较有名的定义:
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
根据这个定义,我们知道实现单例模式有两个要求,我们可以把它们理解成:一个符合单例模式的类仅能实例化一个不变的对象,也就是说,对这个类的多次实例化得到的是同一个对象;这个类可以在全局范围内被实例化。我们暂且不管它的实现,我们首先考虑的是,这么做有什么意义呢?意义就是,它可以确保唯一性,并且在一定程度上可以起到节约资源的作用。举例来说,我们用同一个QQ账号在同一台计算机上登录是失败的,因为你不需要两个完全一样的聊天工具,它们界面相同,接收的消息相同,这是重复的,是没有意义的。而且这样做还浪费了系统资源。所以,这就是单例模式存在的意义。
那么单例模式应该怎样实现呢?总的来说有以下三种实现方案:
懒汉式:
// 1、懒汉式
public class SingletonPattern {
// 声明一个私有静态的实例引用
private static SingletonPattern singletonPattern = null;
// 把无参构造方法设置为私有,防止外部类通过构造方法创建实例
private SingletonPattern() {
}
public static SingletonPattern getSingletonPattern() {
if (singletonPattern == null) {
singletonPattern = new SingletonPattern();
}
return singletonPattern;
}
}
饿汉式:
// 2、饿汉式
public class Test {
// 在内部类中实现单例模式
public static class SingletonPattern {
private static final SingletonPattern singletonPattern = new SingletonPattern();
// 同样是私有的构造方法
private SingletonPattern() {
}
public static SingletonPattern getSingletonPattern() {
return singletonPattern;
}
}
}
双重锁式:
// 3、双重锁式
public class Test {
// 在内部类中实现单例模式
public static class SingletonPattern {
private static SingletonPattern singletonPattern = null;
// 设置私有的构造方法
private SingletonPattern() {
}
public static SingletonPattern getSingletonPattern() {
if (singletonPattern == null) {
// 保证线程同步
synchronized (SingletonPattern.class) {
if (singletonPattern == null) {
singletonPattern = new SingletonPattern();
}
}
}
return singletonPattern;
}
}
}
以上三种形式,有的是线程安全的,有的是线程不安全的。有的通过外部类实现,有的通过内部类实现。总之,具体使用情况还得具体分析。
本文有分析得不到位甚至是错误的地方,还请大家指正!
本文引用出处:单例模式_百度百科 词条创建者:20071522110Java设计模式之——单例模式的更多相关文章
- 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设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
随机推荐
- SQL Server 2005下载安装
好久没弄过数据库了,打算重温一下,由于是新买的笔记本,所以今天下载安装了一下哈. 官网 http://www.microsoft.com/zh-cn/download/default.aspx 在官网 ...
- QT事件
qtevents多线程工作object存储 Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文 ...
- Foundation: NSNotificationCenter
一个NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,它实质上就是一个通知分发表.这个分发表负责维护为各个通知注册的观察者,并在通知到达时,去查找相应的观察者,将通 ...
- oracle学习----特殊的连接方式
1.笛卡儿积 merge join cartesion SQL> select ename,dname from emp,dept; 已选择56行. 执行计划------------------ ...
- Java实现希尔排序(增量递减排序)
package Insert.sort; import java.util.Scanner; /*又叫缩小增量排序,本质是插入排序,将待排的序列增量分成几个子序列,分别对每个子序列进行直接插入排序 * ...
- vi快捷键必知必会
文本编辑器是所有计算机系统中最常用的一种工具.UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结,以资共享!渴望更正和补充! ...
- JMS—事务管理
Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...
- 黑色遮罩引导蒙版 CSS实现方式
一.微云的实现 网站有一些改动的时候,为了让用户熟知新的操作位置,往往会增加一个引导,常见的方式就是使用一个黑色的半透明蒙版,然后需要关注的区域是镂空的. 然后上周五我去微云转悠的时候,也看到了引导层 ...
- WebSocket使用教程 - 带完整实例
http://my.oschina.net/u/1266171/blog/357488 什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的 ...
- pat_1014
1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大侦探福尔摩斯接到一张奇怪的字 ...