设计模式之单例模式(单例模式的五种写法)

                         熊大

单例模式是23种设计模式之一并且属于创建型。
而且单例模式面试题经常出现 。那么接下来让我们看看单例模式得五种写法

第一种饿汉模式:

 public class Singleton {//关键字static 修饰类提前加载好private static final Singleton instance = new Singleton();//提供无参私有构造方法private Singleton() {}public static Singleton instance(){return instance;}
}

类加载得时候就已经被创建好了所以在创建得过程是线程安全得。
也许有人认为这种并不好因为它不是延迟加载得会占用内存。
其实事物都是双面性得如果是一个比较耗时得操作还是希望提前加载出来。

懒汉模式:

public class Singleton {private static Singleton instance ;//提供无参私有构造方法private Singleton() {}public static synchronized  Singleton getInstance(){if (null==instance){instance=new Singleton();}return instance;}}

懒汉模式顾名思义是实例在用到的时候才去创建。

懒汉模式: 每次获取单例的时候加锁如果频繁使用会影响调用效率。
饿汉模式:初始化得时候加载会占用内存不支持延迟加载

双重校验模式:

public class Singleton {// 需要加上volatitle 防止指令重排private static volatile Singleton instance;private Singleton() { }public static Singleton getInstance(){//第一次校验如果为空if (null==instance){//对整个类进行加锁synchronized (Singleton.class){//初始化instance=new Singleton();}}return instance;}
}

从代码上看双重校验模式综合了懒汉、饿汉得优点即支持延时加载也不占用内存。线程也是安全得性能大幅提升。

内部静态类模式:

public class Singleton {private Singleton() { }// 内部静态类public static class SingletonHolder{private static final  Singleton instance=new Singleton();}public static  Singleton getInstance(){return SingletonHolder.instance;}}

SingletonHolder 是一个内部静态类,当外部类 Singleton 被加载的时候,并不会创建 SingletonHolder 实例对象。只有当调用 getInstance() 方法时,SingletonHolder 才会被加载,这个时候才会创建 instance。instance 的唯一性、创建过程的线程安全性,都由 JVM 来保证。所以,这种实现方法既保证了线程安全,又能做到延迟加载。

枚举Enum:

public enum Singleton{INSTANCE;private void singleton(){}
}

枚举类型本身的特性保证了实例创建的线程安全性和实例的唯一性。

对于枚举还有许多妙用如我们在开发得时候经常会遇到状态的判断。

如对于一笔订单来说是成功、失败、处理中各有不同的逻辑处理也许有的人会用if,也许有的人会用switch 其实用枚举也可以搞定如下。

@Slf4j
public enum Singleton{SUCCESS {@Overridepublic void doSomeThing() {log.info("处理成功时得方法");}},FAIL {@Overridepublic void doSomeThing() {log.info("处理失败时得方法");}},PROCESSING {@Overridepublic void doSomeThing() {log.info("处理中得方法");}};// 多个实现 职责单一public abstract void doSomeThing();
}

假如代码这样写是不是就可以根据它返回的状态直接这样写Singleton.valueOf(status).doSomeThing这样代码是不是比较简洁呢!

如有错误请添加微信指出或者评论指出
当然也寻找志同道合的同学一起进步下面是个人微信欢迎您的添加:

面试题单例模式的五种写法(枚举妙用)相关推荐

  1. Java 实现单例模式的七种写法

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

  2. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...

    http://cantellow.iteye.com/blog/838473 http://meizhi.iteye.com/blog/537563 第一种(懒汉,线程不安全): Java代码  pu ...

  3. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  4. 回字有四种写法,那你知道单例有五种写法吗

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 转自 ...

  5. Java设计模式——单例模式的七种写法

    单例模式(Singleton) 单例模式(Singleton)是一种常用的设计模式.在Java应用中,单例模式能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处: 1.某些类创建比较频 ...

  6. 单例模式的七种写法(转)

    转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码   public class Singleton { priv ...

  7. Java单例模式的七种写法

    第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} pu ...

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

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

  9. KandQ:单例模式的七种写法及其相关问题解析

    设计模式中的单例模式可以有7种写法,这7种写法有各自的优点和缺点: 代码示例(java)及其分析如下: 一.懒汉式 public class Singleton {private static Sin ...

  10. 使用严格模式的坏处_再见面试官:单例模式有几种写法?

    点击上方"JAVA",星标公众号重磅干货,第一时间送达 饱汉模式 饿汉模式 Holder模式 枚举模式 丑陋但好用的语法糖 总结 " "你知道茴香豆的'茴'字有 ...

最新文章

  1. HarmonyOS 使用DevEcoStudio创建一个xml布局以及引用布局
  2. 又一壮举!GPT-3首次完成剧本创作,AI解决创造性问题的能力正迅速提升
  3. 4、Eternal框架-持有者
  4. clodeblocks debug断点调试_Intellij IDEA高阶DEBUG大杀器
  5. 夜间模式html,Web前端-夜间模式
  6. typec四线焊接图_实物图+电气图纸讲解:教你学会看配电系统图,不收藏,可惜了...
  7. eclipse发布web显示异常,清除缓存也无效?
  8. jquery li ul 伪分页_求教关于Jquery的ul li的分页,该怎么处理
  9. python解题教学_PYTHON教学设计:计算机解决问题的过程教案-精.doc
  10. UIView设置背景渐变色
  11. 亲密关系沟通-【情感勒索】建立良性沟通
  12. NYOJ259 - 茵茵的第一课
  13. python config文件_Python如何配置config文件?
  14. 关于Java堆栈的理解与说明
  15. vue中清除浏览器缓存得方法
  16. IOT漏洞挖掘学习笔记(一)——堆基础及相关数据结构
  17. google浏览器打包扩展程序
  18. 2016华为软件精英挑战赛:赛题及其答疑汇总
  19. 蓝桥杯第十届真题B组(2019年)
  20. CSS下划线与文字间距,下划线粗细以及下划线颜色的设置

热门文章

  1. android 标准注释方法,android studio 学习笔记之 注释规范化
  2. Netcraft:2017年7月Web服务器调查报告
  3. 阿里 P7 到底该具备什么样的能力?
  4. 最强推荐:阿里P7级别面试经验总结,进阶学习资料!
  5. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字...
  6. mysql workbench 备份数据库
  7. 2345浏览器兼容模式怎么设置
  8. 一位女性程序员的职业规划
  9. 20145322何志威《网络对抗》逆向及Bof基础
  10. 校园江湖前情回顾(一二三)