23种设计模式—单例模式
来源:互联网 发布:软件试用报告范文 编辑:程序博客网 时间:2024/06/11 06:14
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并提供一个访问它的全局访问点。这个类称为单例类。
使用单例的好处是可以节省内存,因为它限制了实例只能有一个,有利于垃圾回收。
1,应用场景
在很多操作中,比如建立目录,数据库连接都需要这样的单线程操作。 最常见的就是windows中的模态弹窗了。
2,单例模式的特点
单例类创建自己的唯一实例。
(私有静态实例)
单例类只能有一个实例。
(私有构造器)
单例类给其他对象提供这一实例的访问点。
(共有静态方法)
3,单例模式分懒汉式和饿汉式
饿汉式:实例初始化;
懒汉式:实例不初始化,加载时初始化;
4,按照《Effective Java》中的说法:
单元素的枚举类型已经成为实现Singleton的最佳方法。用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。
5、UML图例
6,java代码
1)饿汉式单例模式,instance在定义的时候就初始化。
//单例模式,饿汉式public class Singleton {//当类加载时,就实例化唯一的实例private static Singleton instance = new Singleton();//私有的构造器private Singleton(){}//全局访问点public static Singleton getInstance(){return instance;}}
2)懒汉式单例模式,instance在使用的时候才初始化。在多线程并发的时候,可能会创建多个实例,所以需要synchonized加锁控制。以下2种getInstance都是线程安全的。
//单例模式,懒汉式public class SingletonLazy {//当类加载时,并不实例化private static SingletonLazy instance = null;//私有的构造器private SingletonLazy(){}/** * 全局访问点,synchronized:保证唯一一个实例 */public static synchronized SingletonLazy getInstance(){//在使用的时候实例化if(instance == null)instance = new SingletonLazy();return instance;}/** * getInstance2 主要用于介绍双检锁进行实例化; */public static SingletonLazy getInstance2(){if (instance == null){synchronized(SingletonLazy.class) { if (instance == null)instance = new SingletonLazy(); }}return instance;}}
3)枚举单例
//枚举,单例public enum SingletonEnum {INSTANCE;//全局访问点public static SingletonEnum getInstance(){return INSTANCE;}}
源码下载
链接:http://pan.baidu.com/s/1gfe7a8N
密码:cj72
扫一扫,通过微信也能学习
0 0
- 23种设计模式-单例模式
- 23种设计模式~单例模式
- 23种设计模式-单例模式
- 23种设计模式-----单例模式
- 23种设计模式-单例模式
- 23种设计模式-单例模式
- 23种设计模式——1单例模式
- 23种设计模式——单例模式
- 23种设计模式之——单例模式
- 精通23种设计模式——单例模式
- 23种设计模式之——单例模式
- 【23种设计模式——单例模式】
- 23种设计模式——单例模式
- 23种设计模式—单例模式
- 【23种设计模式】创建型模式 > 单例模式
- 设计模式—单例设计模式
- 设计模式之禅—23种设计模式详解_1 单例模式
- 23种设计模式 之单例设计模式
- Windows程序设计(1)——Win32运行原理(三)
- 写一个特别无聊的博客--让指定的字符串重复
- 原型与继承
- 一个值5000元,且一分钟就学会的“of undefined” bug的解决办法
- D3P0实践小例子
- 23种设计模式—单例模式
- 【题解】Leetcode.319.Bulb Switcher
- DeepID2 face recognition
- ajax实现过程
- JS变量以及其作用域详解
- 地图轨迹平滑算法
- Spring AOP声明式事务异常回滚
- poj 2349
- 跨域