单例模式 java 例子_java单例模式实例
什么是单例模式?
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例场景,也就是说:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象应该有且只有一个。
UML类图:
构建单例模式的关键:
1.构造函数不对外开放,一般为Private
2.通过一个静态方法或者枚举返回单例类对象
3.确保单例类的对象有且只有一个,尤其是多线程的环境下
4.确保单例类对象在反序列化时不会重新构建对象
单例模式构建方式:
1.饿汉模式
2.懒汉模式(Double Check)
3.静态内部类的单利模式
4.枚举单例模式
5.容器实现单例模式
代码示例:
1.饿汉模式
[java]
public class Singleton {
private Singleton(){
}
private static final Singleton Instance=new Singleton();
public Singleton getInstance(){
return Instance;
}
}
2. 懒汉模式(Double Check)
[java]
public class Singleton {
private Singleton(){
}
private static Singleton Instance=null;
public Singleton getInstance(){
if(Instance==null){
synchronized (Singleton.class) {
if(Instance==null)
{
Instance=new Singleton();
return Instance;
}
}
}
return Instance;
}
}
3.静态内部类单例模式
[java]
public class Singleton {
private Singleton(){}
private static Singleton getInstance(){
return SingletonHolder.Instance;
}
/**
* 静态内部类
*/
private static class SingletonHolder{
private static final Singleton Instance = new Singleton();
}
}
当第一次加载Singleton类时,并不会初始化Instance,只有在第一次调用Singleton的getInstance方法时,才会导致
Instance 被初始化。第一次调用 getInstance
方法会导致虚拟机加载SingletonHolder类,这种方式不仅能够确保线程安全,也能够保证单例对象的唯一性,同时也延迟了单例对象的实例化,所以推荐使用这种方法。
4.枚举单例
[java]
public enum SingletonEnum{
INSTANCE;
public void doSomething(){
System.out.println("do sth.");
}
}
5.使用容器实现单例模式
[java]
public class SingletonManager {
private static Map objMap = new HashMap();
private SingletonManager(){ }
//将多种单例类型注入到一个统一的管理类,在使用时根据key获取对象对应类型的对象
public static void registerService(String key, Object instance)
{
if(!objMap.containsKey(key)){
objMap.put(key, instance);
}
}
public static Object getService(String key){
return objMap.get(key);
}
}
这种容器单例模式的实现,在Android中,我们使用的Context的getSystemService(key)的方式,就是利用的容器单例模式。eg:WIndowsManagerService、ActivityManagerService等等。在虚拟机第一次加载该类时,会注册各种Service,这些服务以键值对的形式存储在一个HashMap中,用户使用时只需要根据key来获取到对应的具体服务对象了。
单例模式 java 例子_java单例模式实例相关推荐
- java利用单例模式存储参数_java单例模式使用及注意事项
strtok函数实际上是要把第一个参数的字符串进行修改的.因为这个原因这个字符串的存储位置就不能是只读的, 也就是说不能存放在常量区.在使用char* aa ="abcdefg"; ...
- java单例模式的应用_java单例模式的简单应用例子
单例模式:用于保证在程度的运行期间某个类有且只有一个实例 优势:在于尽可能节约资源 应用场景:还不太懂,希望懂的前辈们补充 -------------------- 通过修改构造方法的访问权限实现单例 ...
- java 单例模式双重检索_Java单例模式的双重检测
1. 一般的单例模式如下: class Singleton{ private static Singleton singleton; private Singleton(){} public stat ...
- java编程的例子_java编程实例
1:编写程序,判断给定的某个年份是否是闰年. 闰年的判断规则如下:(1)若某个年份能被4整除但不能被100整除,则是闰年.(2)若某个年份能被400整除,则也是闰年. import java.util ...
- java单列_Java 单例模式
单例模式 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 常见的应用场景: 任务管理器.回收站.网站的计数器.操作系统的文件系统.在servlet编程中,每个servlet也是单例模式,项 ...
- java的多态代码例子_java 多态实例代码
多态是同一个行为具有多个不同表现形式或形态的能力.多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现,比如: 在现实中,我们按下F1键这个动作: 如果当前在Flash界 ...
- websocket java 例子_java 实现websocket的两种方式实例详解
目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...
- java适配器模式例子_java适配器模式实例解析
适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐.本文会讲解适配器模式的知识要点,以及在实际项目中所使用的真实案例. 1.适配器模式概述: 适配器模式(A ...
- java单例模式7种_Java 单例模式的7种写法
1. 懒汉(线程不安全) // 懒汉,线程不安全 public class Singleton { private static Singleton instance; private Single ...
- 单例模式java概括_单例模式中总有几个歪门邪道的问题要知道!
前言 单例模式是一种应用很广泛的设计模式,提起关于他的问题,我们可以讨论到懒汉.饿汉.synchronized锁,volatile.以及如何做双重判断,以至于最后我们写出来的单例是这样的: publi ...
最新文章
- 【Linux网络编程】广播
- linux操作系统之线程
- 5kb大小的云洗衣机HTML源码 朋友圈在线洗衣服
- Transaction marked as rollbackOnly异常处理 Duplicate entry 'xxx' for key
- java 基础 泛型
- matlab软件进行仿真验证,matlab仿真软件
- 睡眠监测中的一些术语和指标(AASM)
- Python 与金融科技2|数据的滑动平均值及多图可视化
- 基础数据类型补充 set集合 深浅拷贝
- 广东省开展2022年省级制造业单项冠军企业(产品)培育遴选
- NO PANIC!2019: A Blockchain Odyssey 上海启航
- 网狐棋牌游戏平台服务器架构设计分析[转]
- 亚马逊产品该如何定价?这9种定价策略你一定要了解哦!
- abaqus html安装,abaqus 2016安装错误
- 4K Wallpaper HD Wallpapers for mac(4K壁纸软件)
- MapGIS地图导入
- 热评云厂商:软通动力7.93亿元,加速云业务创新升级
- python抓取国家统计局省市区街道社区数据
- 通过和resnet18和resnet50理解PyTorch的ResNet模块
- 传感器CE测试认证检测要求
热门文章
- KDE环境中文语言包安装问题
- 雨木林风linux系统,雨林木风开源系统下载-ylmf.os(雨林木风开源系统)v4.0 正式版 - 极光下载站...
- html右下角图片广告,HTML580用纯JS实现右下角广告代码
- 对讲机在哪插卡?插卡对讲机是什么意思呢?5000公里对讲机的哪点事
- ha linux 设置虚拟ip_配置双机HA - Linux下环境安装配置Rose HA全攻略(图)_数据库技术_Linux公社-Linux系统门户网站...
- 安装使用cuteFTP注意事项
- vm15 安装win11 预览版
- cocos creator人物动画切换控制
- 1213家中国厂商涌入拉斯维加斯!CES 2019最全预告在此...
- 7-5 鸡兔同笼 C++编程练习