设计模式之单例模式

来源:互联网 发布:mac截屏的快捷键是什么 编辑:程序博客网 时间:2024/05/29 03:59

杨哥说单列设计模式,通俗易懂,只要看图和例子即可,废话不多说先上个图,看图说话才是王道,呵呵



然后直接上个代码直接了当,是不是很直接,直接。。。。。这里杨哥要告诉小伙伴们,先把杨哥的代码拷过去执行一把再说,好了,该上代码了。

package danli_designmode;


//单列类

public class Singleton {

   private static Singleton instance;

    private static  Object syncRoot = new Object();

    private Singleton()

    {

    }


    public static Singleton GetInstance()

    {

        if (instance == null)

        {


        synchronized (syncRoot)

            {


                if (instance == null)

                {

                    instance = new Singleton();

                }

            }

        }

        return instance;

    }

}


这个类呢就很重要的了啦,眼尖的小伙们呢,已经看出该类中有两处玄机的地方,没看出的下伙伴呢,放大你的眼珠子,仔细研究哦,杨哥先上程序然后再说:

package danli_designmode;


public class SingletonMain {


public static void main(String[] args) {


        Singleton s1 = Singleton.GetInstance();

        Singleton s2 = Singleton.GetInstance();


        if (s1 == s2)

        {

        System.out.println("Objects are the same instance");

            

        }

}


}


好了,到这里你可以拿杨哥的代码到你那战斗机中溜一把试试咯,如果没有意外发生的话,在你那战斗机屏幕上应该会出现杨哥贴的这个效果:



看见没有,得到的两个实例竟然相等,为什么呢?为什么呢?接下来杨哥给你简单粗暴的方式说说杨哥所理解的单列设计模式:

       其实啊,单例设计模式,解决的就是一个痛点:在你的项目中一个类仅有一个实例,不管你这个项目多大多牛逼哄哄,反正你只需要一个实例,因为有些时候一个类就只需要一个实例,打个比方比如在你经济有限的情况下,总不能生多个大头娃吧,我们的项目中也应如此,实例多了难管理等,只需要一个的我就要一个,并且我们应该让自身去创建管理该实例,同时提供一个全局访问该实例的入口即可。

     但单例模式中我们要避免多线程安全问题,所以呢需要加上双重锁。。

     杨哥说的是不是很简单粗暴易懂,是不是,是不是,如果是,点个赞,说个评论哦,说不定还能够大家一起撸撸代码。。。