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

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

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

优点:

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

转载于:https://www.cnblogs.com/tony-yang-flutter/p/3364432.html

Java中的单利模式介绍相关推荐

  1. Java中的模板方法模式

    模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更改只会影响超类中的代码 ...

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

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

  3. php simpledateformat,Java中SimpleDateFormat的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于Java中SimpleDateFormat的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么要使用SimpleDateFo ...

  4. java中equals函数所在的类,重写Java中的equals方法介绍

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  5. Java中的贷款模式(又名贷方承租人模式)

    这篇文章是关于在Java中实现贷款模式的. 用例 在保存资源的代码与访问资源的代码之间实现分离,从而使访问代码无需管理资源. 当我们编写用于读取/写入文件或查询SQL / NOSQL数据库的代码时,上 ...

  6. JAVA中常用接口的介绍及使用示例 java lang Comparable

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...

  7. java中的监听器模式

    java中的监听器模式 监听器模式的角色 过程 EventObject EventListener 例子1 监听按钮的点击事件 事件源 event source: Button 事件对象 event ...

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

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

  9. Java中的策略模式实例教程

    策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...

最新文章

  1. build.xml java打包_配置pom.xml用maven打包java工程的方法(推荐)
  2. arduino使用oled代码_Arduino提高篇06—温湿度OLED显示
  3. 页面加载完成之后,开始显示内容
  4. Replace Method with Method Object(以函数对象取代函数)
  5. iOS进阶(数据库之SQLite)
  6. java泛型详解_Java泛型详解(透彻)
  7. 【转】关于23种设计模式的有趣见解
  8. Java中action类与实现类Actionsupport
  9. # 研究杂感 × VOSviewer(第三辑)
  10. Python小练习——电影数据集TMDB预处理
  11. TODO:这是一个我的自媒体
  12. JUC种常用的辅助类
  13. 零基础能掌握seo知识吗
  14. 洛谷 P4188 [USACO18JAN]Lifeguards (线段树)
  15. 电脑读卡器,笔记本读卡器怎么用教程
  16. Java核心类库之(常用API、字符串类、集合类、泛型)
  17. 100天精通Python(基础篇)——第19天:练习题:我要买票吗
  18. 基于Python的二次元音乐可视化分析ACG音乐发展
  19. 解决localhost打不开的情况
  20. 谷歌浏览器驱动国内镜像下载地址

热门文章

  1. typedef函数指针用法
  2. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...
  3. Akka 接收消息超时的处理_Receive Timeout
  4. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
  5. EXPLAIN PLAN获取SQL语句执行计划
  6. 北京点击科技有限公司董事长兼总裁——王志东经典语录4
  7. 项目经理需要修炼的9件事
  8. python中的函数参数主要有四种_python3中函数参数的四种简单用法
  9. VIM — vim-go
  10. DPI — 深度数据报文解析