单例模式
来源:互联网 发布:stoll制版程序员招 编辑:程序博客网 时间:2024/05/17 03:02
原理:
字面意义:
一个类只有一个对象,仅提供一个全局访问点。
其它类似解决方案:
1.静态变量
2.程序员间协商全局变量
特点:
a.单例类只能有一个实例。
b.单例类必须自己创建自己的唯一实例。
c.单例类必须给所有其他对象提供这一实例。
c.单例类必须给所有其他对象提供这一实例。
应用:
登记式单例类是为了克服饿汉式单例类和懒汉式单例类不可继承的缺点而设计的。
代码略
1. Windows的Task Manager(任务管理器)就是很典型的单例模式,只能打开一个。
2. windows的Recycle Bin(回收站)也是典型的单例应用。
3.网站的计数器,一般也是采用单例模式实现,否则难以同步。
4. Web应用的配置对象的读取。这个是由于配置文件是共享的资源。
5.数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
6.多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
7.操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。
单例模式三种实现方式:
1.第一种形式: 饿汉式单例类(类加载时就初始化)
public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } }2.第二种形式:懒汉式单例类 (调用时初始化)
<span style="font-size:18px;">public class Singleton { private Singleton(){} private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null)instance=new Singleton(); return instance;}</span>3.登记式单例类
登记式单例类是为了克服饿汉式单例类和懒汉式单例类不可继承的缺点而设计的。
代码略
优化:
对多线程问题的解决
1.同步锁
在访问点方法上加synchronized,消耗资源
2.静态对象直接赋值(饿汉模式)
浪费了内存
3.双重检查加锁法
在实例对象前家关键字(volatile)
<span style="font-size:18px;">if(instance != null){ synchronized(Single.class){ if(instance != null){ instance = new Single(); } } return instance;}</span>
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 企业汇报系统细节追加(三)
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
- 快速排序
- 南大软院大神养成计划第十四天
- Android AutoLayout全新的适配方式 堪称适配终结者
- 单例模式
- 大话设计模式之面向对象基础篇(三)
- linux 系统11步yum安装MySQL数据库
- Thread类的应用
- oracle 11g角色管理
- Java - 认识 JDBC
- 直接跳转到appStore
- 数据库 关系代数 投影概念理解
- RTSP二次开发包