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设计模式之单例模式(七种方法)
单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...
随机推荐
- Mac system快捷键
官方的快捷键是 control+command+F 进行窗口和全屏的切换. 1042282500@qq.com yss12313
- 如何从零开始学习DIV+CSS
CSS是样式,DIV是层.DIV+CSS是网站标准(web标准),通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别.因为XHTML网站设计标准中,不再使用表格定位技术,而是采用D ...
- 常见资源记录定义(Resource Record)
所有的RRs(Resource Records)都具有相同的顶级字段格式定义:owner TTL CLASS TYPE RDATA owner 指示拥有资源记录的DNS域名 TTL 对大多数资源记录 ...
- Spring MVC中如何传递对象参数
springController: @Controller @RequestMapping("/user") public UserController extends BaseC ...
- flash wmode="window&qu…
引用一段话:opaque和tranparent由于都是无窗口内渲染模式,能很好的实现各层的遮挡,和一般div元素没有太大区别,而window.direct模式在现在看来,是没有任何办法实现被DHTML ...
- C#做的一个加密/解密的类
转自:http://www.16aspx.com/Article/3904 using System; using System.Security.Cryptography; using System ...
- Struts2 多文件下载
Step1:导入支持jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar jstl-1.2.jar standard-1.1.2.jar commo ...
- iOS开发——文本高度
1.简单的计算文本高度 // 要计算的文本内容 NSString *testString = @"刘成利,软件工程专业毕业,iOS开发者,目前工作于北京,在证券金融领域从事iOS App开发 ...
- webui layout like desktop rich client
similarity similarlike desktop js frameworklike extj js frameworklike rich client js frameworkjs lay ...
- windows server 2008镜像重启后密码变为默认密码的问题的解决方案
1. cmd中执行regedit,打开注册表: 修改HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cloudbase Solusions\Cloudbase-Init ...