引自百度百科:

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。

通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

单例模式其实算一个比较容易理解的设计模式了,让我们来查看一个比较有名的定义:

单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 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;
}
}
}

以上三种形式,有的是线程安全的,有的是线程不安全的。有的通过外部类实现,有的通过内部类实现。总之,具体使用情况还得具体分析。

本文有分析得不到位甚至是错误的地方,还请大家指正!

本文引用出处:单例模式_百度百科
词条创建者:20071522110

Java设计模式之——单例模式的更多相关文章

  1. java 设计模式之单例模式

    -------Success is getting what you want, happiness is wanting what you get. java设计模式之单例模式(Singleton) ...

  2. 折腾Java设计模式之单例模式

    博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...

  3. Java设计模式之单例模式(七种写法)

    Java设计模式之单例模式(七种写法) 第一种,懒汉式,lazy初始化,线程不安全,多线程中无法工作: public class Singleton { private static Singleto ...

  4. Java 设计模式之单例模式(一)

    原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...

  5. java设计模式1——单例模式

    java设计模式1--单例模式 1.单例模式介绍 1.1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 1.2.常见场景 1.3.单例模式的优点 1.4.常见的五种单例模式实现 ...

  6. java设计模式之单例模式你真的会了吗?(懒汉式篇)

    java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...

  7. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  8. java设计模式- (1)单例模式

    参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...

  9. [转]JAVA设计模式之单例模式

    原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...

  10. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

随机推荐

  1. systemtap 列出所有linux 内核模块与相关函数1

    阿里云主机 [root@monitor klvl]# uname -aLinux monitor 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20: ...

  2. vim中的一些高级命令的使用

    现在一般在windows下面对txt文档操作的时候,我一般使用gvim软件来操作,虽然没有unix/linu下面的正宗,并且很多命令没有,但是还是有很多方便之处的 下面是重温vim命令时,我我自己以前 ...

  3. Linux--------------安装nginx ftp

    阿里云服务器ECS centos7.2搭建nginx环境以及负载均衡 http://blog.csdn.net/ul646691993/article/details/52104082

  4. HD1285(拓扑排序)

    package cn.hncu.dataStruct.search.topSort; import java.util.Scanner; public class Hdu1285 { static S ...

  5. iOS之CAKeyframeAnimation关键帧动画详解

    CABasicAnimation算是CAKeyFrameAnimation的 特殊情况,即不考虑中间变换过程,只考虑起始点与目标点就可以了.而CAKeyFrameAnimation则更复杂一些,允许我 ...

  6. 面向对象(POP)和面向过程(OOP)

    我对面向对象和面向过程的理解 面向过程:(procedure oriented programming 即:POP) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时 ...

  7. Mac安装Mysql无法登录

    Mac安装的Mysql5.7.10 执行mysql -u root -p 就要求输入密码,但是新安装是没密码的.然后就会报错. ERROR 1045 (28000): Access denied fo ...

  8. 转:XMLP报表导出为excel时设置文本不自动转为数字

    转自:http://yedward.net/?id=337 对于这个问题,只要在RTF模版中设置下强制LTR即可,设置方法如下: 图1:勾选强制LTR 也可以自己输入下面的代码: <fo:bid ...

  9. 通过配置tomcat虚拟路径配置站点的静态资源

    我们常常站点中会提供给用户上传文件.图片.视频或者诸如为了提高性能生成的静态文件等存储在站点应用中.但如果静态资源文件和项目文件在同一个目录下,当我们重新部署文件时,war重新解压会导致静态资源文件的 ...

  10. 在网页中添加分享到微信、QQ、微博

    参考地址:http://www.bshare.cn/help/installAction 在上面的地址中: 1.可选择分享到的位置,如QQ.微信.微博等 2.按钮的样式.悬浮或者以横幅的方式自己找位置 ...