单利模式:本来是不准备写的,但是最近发现好多公司面试时都会或多或少的提到单利模式,因此今天把单利模式拉出来说说。

定义:只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。(这是百度百科上的定义)

应用场景:是这样的,有些时候在程序的运行过程中,你不想要重复创建同一个类的多个对象(这回造成内存使用过量,对程序的性能不利),这是单利模式就是一个很好的选择,因为它能够保证程序运行时始终仅且仅有一个对象被创建。

优点:

1、控制资源的使用,通过线程同步来控制资源的并发访问;

2、控制实例产生的数量,达到节约资源的目的。

3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不

相关的两个线程或者进程之间实现通信。

单利模式的种类:

1.懒汉式

2.饿汉式

单利模式的特点:

1.单利只能有一个实例(即构造方法必须为私有的即private)

2.单利必须自己给自己创建一个能够保证唯一性的实例

3.单利必须提供一个共有的方法来返回它自己的唯一实例

饿汉模式介绍:

依据的原理:根据JLS(Java Language Specification)中的规定,一个类在一个ClassLoader中只会被初始化一次,这点是JVM本身保证的

因此创建后就不会有多例的问题。

优点:

  1.创建方便

  2.效率高  

缺点:

  1.对内存的使用量较大

应用场景:适用于小对象,对于过于大的对象就应该考虑适用懒汉时的了。

以下上饿汉模式的代码:

public class Singleton {
private Singleton(){}
private static final Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
} }

懒汉模式介绍:

懒汉模式,适用于所有的应用场景,但是要做过多的判断,相对来说它会影响程序的运行性能。

优点:

  1.适用于所有的应用场景

  2.使用时占内存较小(只有在使用的时候才会被创建)

缺点:

  1.性能较低

  2.书写较为繁琐

先看看一个简单的懒汉式例子:

    private Singleton(){}
private static Singleton instance = null;
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}

这段代码有什么问题呢?

对了,这段代码仅适用于单线程应用。对于多线程并发操作并没有做处理。这就会导致代码在运行是并不能保证程序中的对象在运行时始终是唯一的。

下面给出一个相对较好的单利模式:

private Singleton(){}//保证在类的外部对象并不会创建
private static Singleton instance = null;
public static Singleton getInstance(){//给外部提供一个范文自身的方法
if(instance == null){
synchronized (Singleton.class) {
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}

下面介绍一个对性能影响较小,又能保证内存使用量的单利模式

public class Singleton {
private Singleton(){}
//该类为静态私有内部类,只有外部类才能够调用
private static class PrivateSingleton{
//保证对象的唯一性。
static final PrivateSingleton instance = new PrivateSingleton();
}
public static PrivateSingleton getInstance(){
return PrivateSingleton.instance;
} }

以上这段代码,首先保证了该类的对象不会被外部类创建实例,而且解决了多线程并发的问题。

好了,单列模式就先介绍到这里。下面给大家一个链接,上面有单利的详细介绍,提供了6中单利的创建模式。有兴趣的朋友可以看看

http://www.iteye.com/topic/575052

Java中的单利模式介绍的更多相关文章

  1. Java中的单利模式

    单利模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...

  2. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

  3. (转)轻松学,Java 中的代理模式及动态代理

    背景:讲到反射机制,肯定会想到动态代理. 轻松学,Java 中的代理模式及动态代理 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强.值得注意的是,代理类和被代理类应该 ...

  4. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  5. Java 设计模式之单利模式

    一.首先介绍一下单例模式:     单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局 ...

  6. Java设计模式之单利模式(Singleton)

    单利模式的应用场景: 单利模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例.并提供一个全局反访问点.单利模式是创建型模式.单利模式在生活中应用也很广泛,比如公司C ...

  7. 安卓中的Model-View-Presenter模式介绍

    转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0425/2782.html 英文原文:Introduction to M ...

  8. JAVA中的单利

    单列:单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.单例模式有一下特点:1.单例类只能有一个实例.2.单例类必须自己自己创建自己的唯一实例.3.单例类必须给所有其他对象提供这一实例. 一.懒 ...

  9. Java中的代理模式

    代理模式在Java Web的框架中经常使用到.比如说在对数据库的访问中,核心功能是对数据库的增删改查,而连接数据库.处理事务等功能我们在开发中也要考虑到.所以我们将数据库的CRUD抽象到接口中,然后实 ...

随机推荐

  1. HDU1281(KB10-D 二分图最大匹配)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. centos下Nginx安装和配置多个域名的虚拟主机

    nginx安装步骤,源码编译安装(源码编译,可以自定制更多功能) openssl #user nobody; worker_processes ; #error_log logs/error.log; ...

  3. ORM中自定义一个char类型字段

    自定义一个char类型字段 class MyCharField(models.Field): """ 自定义的char类型的字段类 """ ...

  4. Code Signal_练习题_evenDigitsOnly

    Check if all digits of the given integer are even. Example For n = 248622, the output should beevenD ...

  5. 安卓基础之Sqlite数据库最最基础操作

    Sqlite数据库基础操作 摘要:在应用中新建一个数据库,并创建一个数据表写入数据,然后读取表中数据并展示. 主要逻辑: 1.通过继承SQLiteOpenHelper自定义类,定制数据库的表结构,初始 ...

  6. Django 序列化三种方式 对象 列表 元组

    1.xuliehua.html <html lang="en"> <head> <meta charset="UTF-8"> ...

  7. Bootstrap源码分析系列之初始化和依赖项

    在上一节中我们介绍了Bootstrap整体架构,本节我们将介绍Bootstrap框架第二部分初始化及依赖项,这部分内容位于源码的第8~885行,打开源码这部分内容似乎也不是很难理解.但是请站在一个开发 ...

  8. 【SPL标准库专题(9)】 Datastructures:SplObjectStorage

    PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...

  9. python终端总是无法删除字符

    yum install readline-devel

  10. jquery中ajax的dataType的各种属性含义

    参考ajax api文档:http://www.w3school.com.cn/jquery/ajax_ajax.asp dateType后接受的参数参数类型:string 预期服务器返回的数据类型. ...