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