2.5設計模式(單例設計模式)

1.設計模式:23種設計模式。對問題行之有效的解決方式。其實它是一種思想。
2.單例設計模式:就是可以保證一個類在內存中的對象唯一性。
解決辦法:

步驟:
1)私有化該類的構造函數。
2)通過new在本類中創建一個本類對象
3)定義一個公有的方法,將創建的對象返回。

代碼例子:
1.餓漢式:一上來就吃

/*
設計模式:23種設計模式。對問題行之有效的解決方式。其實它是一種思想。

1.單例設計模式。
        解決的問題:就是可以保證一個類在內存中的對象唯一性。

比如說對於多個程序使用同一個配置信息對象時,就需要保證該對象的唯一性。

如何保證對象的唯一性?
1)不允許其他程序用new創建該類對象。
2)在該類中創建一個本類實例。
3)對外提供一個方法讓其他程序可以獲取該對象。

步驟:
1)私有化該類的構造函數。
2)通過new在本類中創建一個本類對象
3)定義一個公有的方法,將創建的對象返回。
*/


class Single //類一加載,對象就已經存在了
{
    private Single(){};

    private static Single s = new Single();     //成員變量一般不暴露出去

    public static Single getInstance()   //這個方法存在是賦予對象的可控性
    {
            return s;
    }
}
class SingleDemo
{
    public static void main(String[] args)
    {
            Single ss = Single.getInstance();
            Single s1 = Single.getInstance();
            System.out.println(ss == s1);
            //Single ss = Single.s;   //這樣對象沒有可控性

            Test t1 =Test.getInstance();
            Test t2 =Test.getInstance();
            t1.setNum(10);
            t2.setNum(20);
            System.out.println(t1.getNum());
            System.out.println(t2.getNum());
    }
}

class Test
{
    private int num;

    private Test(){};

    private static Test t = new Test();

    public static Test getInstance()
    {
        return t;
    }

    public void setNum(int num)
    {
        this.num = num;
    }

    public int getNum()
    {
        return num;
    }
}

3.單例設計模式內存分析:
單例設計模式分析

4.另一種表現模式:延遲加載形式,面試這個問得比較多。(懶漢式:用的時候再做)

class Single2    //類加載進來,沒有對象,只有調用了getInstance方法時,纔會創建對象。
                                //稱爲延遲加載形式
{
    private Single2(){};
    private static Single2 s  = null;
    private static Single2 getInstance()
    {
        if(s == null)
            s = new Single2();
        return s;
    }
}

5.注意:

面試時,問懶漢式比較多,知識點較多。

開發時,用餓漢式:
1.因爲單例這個類就是要用對象,所以先加載後加載沒區別。
2.懶漢式存在問題:如果被多線程併發訪問時,可能保證不了對象的唯一性,有安全隱患。想保證要改,改了之後效率也降低了。
發佈了36 篇原創文章 · 獲贊 0 · 訪問量 4584
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章