单例模式、Single
单例设计模式
单例:唯一的实例,在整个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相关推荐
- 单例模式( Single Pattern ): 不仅仅是回字的四种写法
单例模式作为入门编程人员面试必考题之一,也是被玩坏了, 猛然一搜尽然有七种写法,什么懒汉,饿汉五花八门, 这里参考已经比较不错的文章, 忽略五花八门的命名, 把单例模式不同写法按逻辑演进梳理一下, 方 ...
- 设计模式之单例模式与享元模式
设计模式之单例模式与享元模式 摘要 1. 单例模式 2. 享元模式 摘要 单例模式(Single ton)与享元模式(Flyweight)归为对象性能模式. 1. 单例模式 顾名思义,单例就是 ...
- 安卓常用6种设计模式总结
转载自https://blog.csdn.net/u012583459/article/details/47079529 和https://blog.csdn.net/u012583459/artic ...
- 苹果风格ui设计_重新设计苹果音乐应用程序ui ux案例研究
苹果风格ui设计 重点 (Top highlight) TLDR? UI重新设计 (TLDR? UI Redesign) I didn't realise how much I'd written f ...
- Centos7安装并使用Oracle11g数据库
centos7安装Oracle11g 一.安装的硬件要求 1.内存: 要求:内存最小1G,推荐2G或者更高 查看命令:# grep MemTotal /proc/meminfo 二.环境准备 2. S ...
- Linux系统中安装Oracle 数据库操作
我的centos7是在virtualbox下安装的,安装Oracle安装了好久好久,现将详细操作步骤写下来. 一.安装的硬件要求 1.内存: 要求:内存最小1G,推荐2G或者更高.呃呃呃 查看命令:# ...
- 23种设计模式以及关联关系
结构型模式 适配器模式(adapter):当两个程序之间无法直接调用的时候,会在中间加上一个适配器.有两种模式,分别是类适配器模式和对象适配器模式,类的适配是指当一类像调用某个接口的功能,但是不能直接 ...
- Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了
今年呆在家中实在无聊,外面太危险了,还是在家学习比较安全可持续. 过年期间,我又复习了几遍依赖注入框架Dagger. 诶,什么是依赖注入? 说白了就是降低跟类对象之间的耦合,当需要修改类对象的时候,能 ...
- single java_java single Pattern 单例模式
单例模式是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它涉及到一个单一的类,该类自己负责创建自己的对象并且确保只有单个对象被创建. 这个类提供了一种访问其唯一的对象的方式,可 ...
- java single instance_java单例模式(具体代码显现)两种方法
判断是否存在 /** * 懒汉式 */ public class LazySingleInstance { // 私有构造方法 private LazySingleInstance(){}; // 私 ...
最新文章
- 以非生产模式的方式启用SAP Spartacus的服务器端渲染SSR
- 用友ERP-U8执行完成流程小记
- tomcat 7 jndi mysql,tomcat7添加mysql数据库的jndi数据源
- js 闭包与垃圾回收-待删
- ccf公共钥匙盒python_[Python]CCF——公共钥匙盒(201709-2)
- 程序设计导引及在线实践之时区间时间的转换
- 广州科源980tc数控系统说明书_广州数控GSK980TC3车床数控系统 操作轴名
- 【函数】- 如何在C++中求平方根?
- als算法参数_ALS算法
- 给大家带来一道原创C++题ya,大家把代码发在留言框。我会随后公布答案哦!!
- linux系统服务器日志,linux系统日志及日志服务器
- win7锁定该计算机快捷键,Win7电脑锁定计算机快捷键的方法.ppt
- C/C++源代码如何变成可执行程序的?
- docker容器网络配置之容器间的链接(默认桥接网络下的links)
- M70003中型Android平板电脑亦称IPED 13价格ipad的
- Selenium本地打开远程浏览器
- DTOJ 4426. 爱乐之城
- MMKV:微信团队开源的轻量级存储方案
- 机器学习 - 随机森林 Random Forest
- 有传言任天堂可能会很快推出N64 Classic Mini
热门文章
- CentOS 7.9.2009查看本机IP地址
- 当游戏遇上电视,智能大屏就能讲出新故事?
- Command not found 解决
- python如何提交作业_用python 实现录入学生作业情况的小程序
- 推荐top10的免费下载破解软件的网站
- 用Hbuilder实现:一行HTML代码+tab快捷键,快速创建HTML结构
- 全国省市区街道区域信息 API 接口
- webpack源码解析系列(一)
- linux+硬盘rd5,BackTrack5(BT5)硬盘安装完美教程 亲测可用
- TSO/GSO/LRO/GRO测试