点击这里给我发消息 点击这里给我发消息

Java设计模式之Singleton单例模式

添加时间:2013-12-7
    相关阅读: 设计 广州 公司

    Singleton (单例模式)

    Intent :Ensure a class only has one instance , and provide a global point of access of it.

    瞎谈:就是保证一个类只有一个实例,并且提供一个全局可访问的点。打个比方,广州限制每户人家养狗,但是只能养一条。一开始你没有狗,你去买一条。若干年后,狗不行失踪了。你为了填补寂寞的空虚,别人又送你一条(或者还是你自己买的)。我们不关注你的狗来源,只保证你家的狗每时每刻就一条。你为了确保以后养狗方便,就到保险公司办了保险,他们承诺,你的狗要是出现意外事故,他们负责陪一条给你。从此,你自由了,狗的事情交给别人了,而且别人也保证只给一条给你。

    正经:很多时候我们要保证类的实例只有一个。我们可能在自己的代码中判断需要的类的实例有无,无就new一个。这样看似不错。问题是,你用到这个类的地方有n个,这样你就需要n个判断。为什么不把这个职责交给类本身呢?然后让类提供一个接口访问

    代码实现:

    public class Singleton

    {

    private static Singleton singleton=null;

    private Singleton()

    {}

    public static Singleton instance()

    {

    if(singleton==null)

    singleton = new Singleton();

    return singleton

    return singleton;

    }

    }

    有无问题:碰上多线程怎么办?凉拌了。加锁吧,或者。。。前人总结的经验,有3中方法

    1.       直接加锁

    public class Singleton

    {

    private static Singleton singleton=null;

    private Singleton()

    {}

    public static synchronized Singleton instance()

    {

    if(singleton==null)

    singleton = new Singleton();

    return singleton

    return singleton;

    }

    }

    2.       早期实例化

    public class Singleton

    {

    private static Singleton singleton = new Singleton();

    private Singleton();

    public static Singleton getInstance()

    {

    return singleton;

    }

    }

    3.       双重检测锁

    public class Singleton

    {

    private volatile static Singleton singleton=null;

    private Singleton(){}

    public static Singleton getInstance()

    {

    if(singleton==null)

    {    synchronized(Singleton.class)

    {

    singleton=new Singleton();

    }

    }

    return singleton;

    }

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册