首先,设计模式是我们程序员在软件开发过程中面临的一般问题的解决方案,通过学习设计模式可以使我们在编程时更加有条理性,同时培养我们写代码的思维能力,从而提高我们的工作效率。接下来就跟着博主的脚步往下走吧~

大多数程序员可能最先接触到的设计模式就是创建模式中的单例模式,单例模式是一种创建型设计模式,是用来创建对象的。

单例模式的核心是无论使用一个类方法多少次,都只产生一个该类对象,这样可以是系统的内存消耗减少一些。

现在回到主题,单例模式的四种实现方式

第一种:饿汉模式-----立即加载的单例模式(最基本的单例模式)

public class Singleton{//创建一个类private Singleton(){}//这个类的构造器,在new时调用private static Singleton sing = new Singleton();//一个静态的属性public static Singleton getInstance(){//提供一个静态方法,返回当前对象return sing;}
}

饿汉模式的优缺点:

优点:没有加锁,有较高的执行效率,同时是线程安全的实例。

缺点:饿汉模式在类加载时会直接实例化单例对象,不管有没有使用到该单例对象,那么当我们new出多个对象但没有使用时,就会浪费内存空间。


第二种:懒汉模式--------延迟加载的单例模式

public class LazySingleton{//这是懒汉模式中最简单但是不安全的一种private LazySingleton(){}private static LazySingleton ls = new LazySingleton();private static LazySingleton getInstance(){if(ls == null){//做判断是为了不随便产生多个实例,只有当其为空的时候才产生新的实例return new LazySingleton();}return ls;}}
public class LazySingleton{
/*这是懒汉模式中的第二种形式,是线程安全的,但是效率比较低,同时锁的范围太大,会影响程序的执行效率*/private LazySingleton(){}private static LazySingleton ls = new LazySingleton();public static synchronized LazySingleton getInstance(){//加上了同步锁if(ls == null){return new LazySingleton();}return ls;
}}
public class LazySingleton{private LazySingleton(){}private static LazySingleton ls = new LazySingleton();public static LazySingleton getInstance(){if(ls == null){//判断对象是否被初始化了synchronized(LazySingleton.class){//没有被初始化就锁住当前类模板if(ls == null){//再一次判断进来的实例是否为空,为空则创建新的实例ls = new LazySingleton();}}}}
}

懒汉模式的优缺点:

优点:不会占用内存,是可以达到线程安全的。

缺点:效率会低一些。


第三种:静态内部类

public class InnerSingleton{private InnerSingleton(){}private static class Inner{//静态内部类private static InnerSingleton is = new InnerSingleton();}public static InnerSingleton getInstance(){return Inner.is; }}

静态内部类创建单例模式的优缺点

优点:创建对象是线程安全带的,同时也不需要使用同步锁来获取对象。


第四种:枚举类创建单例模式

public class EnumSingleton{private EnumSingleton(){}private static enum Test{TEST;//自定义的枚举值private static EnumSingleton es = new EnumSingleton();}public static EnumSingleton getInstance(){return Test.es.TEST; }}

枚举类创建单例模式的优点是可以延迟加载,同时是线程安全的。

以上就是单例模式的四种实现方式,如有不对之处还望各位大佬指出,小弟我认真学习~

这周的简易画~

单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)相关推荐

  1. python创建单例模式_Python单例模式的四种创建方式实例解析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  2. DBCP使用BasicdataSource连接(两种单例模式-----饿汉和懒汉模式)

    DBCP使用BasicDataSource连接 BasicDataSource实现DataSource的接口,可以进行简单的数据库连接 第一种:懒汉模式:顾名思义,"懒",只有在调 ...

  3. python 单例模式的四种创建方式

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  4. Python单例模式的四种创建方式实例解析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  5. 单例模式之饿汉、懒汉模式

    目录 1.单例模式 1.1 饿汉模式 1.2 懒汉模式 1.单例模式 单例模式能保证类在程序中只存在唯一一份实例.这一点在很多场景中都需要,比如JDBC中的DataSource实例就只需要一个. 单例 ...

  6. python 单例模式的实现方法_python中单例模式的四种实现方式

    配置文件settings.py IP='100.0.0.2' PORT=3302 方式一:绑定给类的方法 class Mysql: __instance = None def __init__(sel ...

  7. 单例模式的几种实现方式详解以及原理

    单例模式介绍 前言 这是一个的萌新写的博客,以下是学习课程以后的总结,用于个人的复习与总结,如果有误还请多多包容和指正. 了解单例模式: 单例类只能有一个实例 单例必须创建自己的唯一一个实例 单例类必 ...

  8. 单例模式之饿汉和懒汉(java)

    文章目录 1.前言 2.怎么区分饿汉和懒汉模式 3. 饿汉 4.懒汉 (双重检查 Double Check Lock) 5.饿汉模式在JDK中的应用(Runtime) 6.相关文章 1.前言 面试时, ...

  9. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

最新文章

  1. 学习OpenCV(一)从Mat讲起
  2. Git 基本工作流程
  3. 4.1.9 OS之文件系统的层次结构
  4. tcp out of order解决_Java解决CAS机制中ABA问题的方案
  5. SpringBoot : 定制化Bean的利器:BeanPostProcessor BeanFactoryPostProcessor
  6. java spark es_ES-Spark连接ES后,ES Client节点流量打满分析
  7. Linux文件系统变成只读的解决方法
  8. 2.5 分类模型评估指标—AUC与ROC及绘制混淆矩阵与ROC曲线
  9. “私域”和“会员制”有什么区别?
  10. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感?
  11. 嵌入式Qt-做一个秒表
  12. 概率论与数理统计的基本概念
  13. [应用漏洞]CVE-2015-7450 WebSphere命令执行
  14. Python 使用乐动体育的 backoff 更优雅的实现轮询
  15. 我的学习工作经历,一个园林专业中专毕业生的IT之路 学习编程 创业
  16. (吴恩达)6.应用机器学习的建议、机器学习系统的设计
  17. 阿里云OSS域名配置及简单上传
  18. python 指定证书验证_使用Python验证SSL证书
  19. C++学习(二一一)英伟达和七彩虹
  20. 小谈网易云音乐----API

热门文章

  1. JavaScript 中的强制类型转换
  2. pfamscan 的使用_基础工具-HMMER用法
  3. 求n的阶乘的算法框图_递归算法是一种直接或者间接调用自身函数或者方法的算法...
  4. google、bing ,baidu 等搜索引擎 查询参数
  5. Oracle 10g的安装
  6. win10升级补丁_微软官方给出无法安装WIN10更新的终极解决办法:覆盖安装
  7. OpenStack部署及创建云主机实例
  8. matlab元胞数组cell添加元素
  9. 基于51单片机实现4位数码管动态显示
  10. 最简单的SVN英文版变中文版的方法