单例设计模式
单例:唯一的实例,在整个Java系统中,某个类的对象只有唯一的一个。
形式:
1、饿(恶)汉式
无论使用者是否要用这个对象,都先创建这个对象。
2、懒汉式
只有在使用者来获取这个对象时,才会创建这个对象。
无论哪一种单例设计模式的写法:
(1)这个类的构造器是私有化 -->保证我们的使用者不能随意的创建第二个对象…
(2)这个唯一的实例必须在本类中创建,并且要用一个静态的变量来存储。

一、饿汉式

1、用一个公共的静态的常量来保存这个唯一的实例对象
2、枚举类
3、用一个私有的静态的常量来保存这个唯一的实例对象,再用一个静态方法返回这个唯一的对象

class Hungry{//(2)用一个静态的变量,来存储这个唯一的对象//这个对象是在类初始化时就创建了public static final Hungry INSTANCE = new Hungry();//(1)构造器私有化private Hungry(){}
}
enum HungryEnum{INSTANCE
}
class HungryDemo{//(2)用一个静态的变量,来存储这个唯一的对象//这个对象是在类初始化时就创建了private static final HungryDemo INSTANCE = new HungryDemo();//(1)构造器私有化private HungryDemo(){}public static HungryDemo getInstance(){return INSTANCE;}
}

二、懒汉式

class Lazy{//(2)用一个静态的变量来保存这个唯一的实例private static Lazy instance;//这里不能new//(1)构造器私有化private Lazy(){}//对的
/*  //(3)当你来获取这个对象的时候,再来创建public synchronized static Lazy getInstance(){if(instance == null){instance = new Lazy();}return instance;}*///(3)当你来获取这个对象的时候,再来创建public static Lazy getInstance(){if(instance == null){//外面这个条件的作用是为了提高效率        当这个对象已经创建过了,那么后面的线程,无论多少个,就没必要等待锁synchronized (Lazy.class) {//Lazy.class获取当前类的Class对象if(instance == null){//里面的条件是为了安全instance = new Lazy();}}}return instance;}
class LazyDemo{//(1)构造器私有化private LazyDemo(){}//内部类private static class Inner{//(2)用静态内部类的一个静态的常量来保存这个唯一的对象public static final LazyDemo INSTANCE = new LazyDemo();static{System.out.println("内部类的静态代码块");}}//当我们调用这个方法时,获取外部类对象,才会导致内部类的加载和初始化,才会导致INSTANCE对象的创建,所以也属于懒汉式public static LazyDemo getInstance (){return Inner.INSTANCE;}//为了测试内部类是否被加载的方法public static void test(){System.out.println("外部类的静态方法");}
}

单例模式、Single相关推荐

  1. 单例模式( Single Pattern ): 不仅仅是回字的四种写法

    单例模式作为入门编程人员面试必考题之一,也是被玩坏了, 猛然一搜尽然有七种写法,什么懒汉,饿汉五花八门, 这里参考已经比较不错的文章, 忽略五花八门的命名, 把单例模式不同写法按逻辑演进梳理一下, 方 ...

  2. 设计模式之单例模式与享元模式

    设计模式之单例模式与享元模式 摘要 1. 单例模式 2. 享元模式 摘要   单例模式(Single ton)与享元模式(Flyweight)归为对象性能模式. 1. 单例模式   顾名思义,单例就是 ...

  3. 安卓常用6种设计模式总结

    转载自https://blog.csdn.net/u012583459/article/details/47079529 和https://blog.csdn.net/u012583459/artic ...

  4. 苹果风格ui设计_重新设计苹果音乐应用程序ui ux案例研究

    苹果风格ui设计 重点 (Top highlight) TLDR? UI重新设计 (TLDR? UI Redesign) I didn't realise how much I'd written f ...

  5. Centos7安装并使用Oracle11g数据库

    centos7安装Oracle11g 一.安装的硬件要求 1.内存: 要求:内存最小1G,推荐2G或者更高 查看命令:# grep MemTotal /proc/meminfo 二.环境准备 2. S ...

  6. Linux系统中安装Oracle 数据库操作

    我的centos7是在virtualbox下安装的,安装Oracle安装了好久好久,现将详细操作步骤写下来. 一.安装的硬件要求 1.内存: 要求:内存最小1G,推荐2G或者更高.呃呃呃 查看命令:# ...

  7. 23种设计模式以及关联关系

    结构型模式 适配器模式(adapter):当两个程序之间无法直接调用的时候,会在中间加上一个适配器.有两种模式,分别是类适配器模式和对象适配器模式,类的适配是指当一类像调用某个接口的功能,但是不能直接 ...

  8. Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了

    今年呆在家中实在无聊,外面太危险了,还是在家学习比较安全可持续. 过年期间,我又复习了几遍依赖注入框架Dagger. 诶,什么是依赖注入? 说白了就是降低跟类对象之间的耦合,当需要修改类对象的时候,能 ...

  9. single java_java single Pattern 单例模式

    单例模式是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它涉及到一个单一的类,该类自己负责创建自己的对象并且确保只有单个对象被创建. 这个类提供了一种访问其唯一的对象的方式,可 ...

  10. java single instance_java单例模式(具体代码显现)两种方法

    判断是否存在 /** * 懒汉式 */ public class LazySingleInstance { // 私有构造方法 private LazySingleInstance(){}; // 私 ...

最新文章

  1. 以非生产模式的方式启用SAP Spartacus的服务器端渲染SSR
  2. 用友ERP-U8执行完成流程小记
  3. tomcat 7 jndi mysql,tomcat7添加mysql数据库的jndi数据源
  4. js 闭包与垃圾回收-待删
  5. ccf公共钥匙盒python_[Python]CCF——公共钥匙盒(201709-2)
  6. 程序设计导引及在线实践之时区间时间的转换
  7. 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
  8. 【函数】- 如何在C++中求平方根?
  9. als算法参数_ALS算法
  10. 给大家带来一道原创C++题ya,大家把代码发在留言框。我会随后公布答案哦!!
  11. linux系统服务器日志,linux系统日志及日志服务器
  12. win7锁定该计算机快捷键,Win7电脑锁定计算机快捷键的方法.ppt
  13. C/C++源代码如何变成可执行程序的?
  14. docker容器网络配置之容器间的链接(默认桥接网络下的links)
  15. M70003中型Android平板电脑亦称IPED 13价格ipad的
  16. Selenium本地打开远程浏览器
  17. DTOJ 4426. 爱乐之城
  18. MMKV:微信团队开源的轻量级存储方案
  19. 机器学习 - 随机森林 Random Forest
  20. 有传言任天堂可能会很快推出N64 Classic Mini

热门文章

  1. CentOS 7.9.2009查看本机IP地址
  2. 当游戏遇上电视,智能大屏就能讲出新故事?
  3. Command not found 解决
  4. python如何提交作业_用python 实现录入学生作业情况的小程序
  5. 推荐top10的免费下载破解软件的网站
  6. 用Hbuilder实现:一行HTML代码+tab快捷键,快速创建HTML结构
  7. 全国省市区街道区域信息 API 接口
  8. webpack源码解析系列(一)
  9. linux+硬盘rd5,BackTrack5(BT5)硬盘安装完美教程 亲测可用
  10. TSO/GSO/LRO/GRO测试