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

Head First Design Pattern 读书笔记(4) 单例模式

时间:2015-02-18 14:10:56      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

Head First Design Pattern 读书笔记(4) Singleton Pattern 单例模式

Silngleton Pattern 类图

单例模式非常简单,基本没有什么类之间的关系,就不画图了,保证某个类生成的实例只有一个即可。

定义

  1. 单例模式:只允许一个类实例化一个对象,并提供一个可以全局访问这个实例的方法(接口)。

关于单例模式

  1. 最简单的单例模式实现方法是:
/*
*“懒汉式”写法,即等要用了再去实例化实例对象,而不是应用一启动就实例化好放在容器中。
*/
public class Singleton {
    private Singleton();
    private static Singleton instance;
    public static getSingleton(){
        if(instance==null){
            instance = new Sinleton();
        }
        return instance;
    }
}
  1. 1中实现的singleton在多线程中可能会有多个线程同时实例化,导致实例对象不止一个的问题,解决方案是使用同步锁,或者使用“饿汉式”的写法。
//双重检查锁的写法,因为使用了volatile关键字,需要jdk1.4以上
public class Singleton {
    private Singleton();
    private static volatile Singleton instance;
    public static getSingleton(){
        if(instance==null){
            synchronized (Singleton.class){
                if(instance==null){
                    instance = new Sinleton();
                }
            }
        }
        return instance;
    }
}

/**
* “饿汉式”的写法,因为没用到同步锁,所以后期效率最高。
**/
public class Singleton {
    private Singleton();
    private static Singleton instance = new Singleton();
    public static getSingleton(){
        return instance;
    }
}

??其实所谓“懒汉式”与“饿汉式”的写法,只是区别在初始化的时机而已。“饿汉式”写法由jvm保证一应用启动时只实例化一个对象,由于多了一步实例化操作,应用启动会稍微慢点。而“懒汉式”由于是在应用启动后实例对象,所以要考虑多线程并发的情况。对于不是很大的应用,个人偏向于“饿汉式”,毕竟启动的时候多花点时间启动,换来后期运行的安全与效率也是值得的。谁没事天天重启生产上的程序啊(╯‵□′)╯︵┻━┻ 。

Head First Design Pattern 读书笔记(4) 单例模式

标签:

原文地址:http://my.oschina.net/u/1010578/blog/379340

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