码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2016-05-07 09:22:53      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

思考问题:如果你希望整个项目中,某个类只能有一个实例,怎么设计?
单例模式有两种表现形式:

饿汉式单例类


(类加载时直接初始化实例,所以饥饿)
实例代码:

public class Singleton {
    //在类加载时生成实例
    private static Singleton instance = new Singleton();
    //私有化构造函数
    private Singleton(){}
    //通过该方法获得实例引用
    public static Singleton getInstance() {
        return instance;
    }
}

注意点:
1. 实例引用必须声明为static才能在类加载时初始化。
2. 必须显式声明private构造函数,避免该单例类被其他类直接new对象、也避免源码编译时被添加默认构造函数。(因为类没有显式声明构造函数时,编译器在编译时会加上无参构造函数)
3. getInstance函数必须声明为static;

懒汉式单例类

(第一次用到实例时才初始化,所以懒)

public class LazySingleton {
    //类加载时不实例化
    private static LazySingleton instance = null;
    //私有构造函数
    private LazySingleton(){}
    //synchronized同步
    public synchronized static LazySingleton getInstance(){
        if (instance==null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

注意点:
1. 必须显式声明private构造函数,避免该单例类被其他类直接new对象、也避免源码编译时被添加默认构造函数。
2.懒汉式单例类中,getInstance函数要使用static和synchronized修饰,保证多线程环境下安全执行。


(线程同步概念:就是保证在多个线程环境下,同一个时刻只有一个线程操作该资源,比如使用synchronized修饰一个方法,那么系统运行时jvm会保证在一个时刻最多只有一个线程操作该方法)
单例模式使用场景:

  1. 要求系统产生唯一序号的环境
  2. 在整个项目中需要一个共享访问点或共享数据,比如web中的计数器。
    3.创建一个对象需要消耗资源过多,如访问IO和数据库等资源。
  3. 需要定义大量静态常量和静态方法的环境。

单例模式

标签:

原文地址:http://blog.csdn.net/petershusheng/article/details/51333817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!