代碼的一天

目標

今天我們還是“賭博”的一天,今天我們首先學習了深入單例設計模式,然后就進入了敲代碼的一天,這個Demo包含的只是非常多,可以說把我會的都用上了,我不會的也運用了不少,加深了我們對已經(jīng)學習的知識的串聯(lián)度。

學習的知識

什么是單例設計模式?
單例模式,是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例。

具體實現(xiàn)
需要:
1.將構造方法私有化,使其不能在類的外部通過new關鍵字實例化該類對象。
2.在該類內(nèi)部產(chǎn)生一個唯一的實例化對象,并且將其封裝為private static類型。
3.定義一個靜態(tài)方法返回這個唯一對象。
實現(xiàn)一:立即加載 / “餓漢模式”
立即加載就是使用類的時候已經(jīng)將對象創(chuàng)建完畢(不管以后會不會使用到該實例化對象,先創(chuàng)建了再說。很著急的樣子,故又被稱為“餓漢模式”),常見的實現(xiàn)辦法就是直接new實例化。

class Pokers{
    //1.默認構造函數(shù)
    //2.定義一個靜態(tài)的成員變量 記錄這個單例對象
    //餓漢式
    //default sharedInstance manager
    public static final Pokers shared=new Pokers();
    private Pokers(){
    }
    public void test(){}
}

“餓漢模式”的優(yōu)缺點:
優(yōu)點:實現(xiàn)起來簡單,沒有多線程同步問題。
缺點:當類SingletonTest被加載的時候,會初始化static的instance,靜態(tài)變量被創(chuàng)建并分配內(nèi)存空間,從這以后,這個static的instance對象便一直占著這段內(nèi)存(即便你還沒有用到這個實例),當類被卸載時,靜態(tài)變量被摧毀,并釋放所占有的內(nèi)存,因此在某些特定條件下會耗費內(nèi)存。
實現(xiàn)二:延遲加載 / “懶漢模式”
延遲加載就是調(diào)用get()方法時實例才被創(chuàng)建(先不急著實例化出對象,等要用的時候才給你創(chuàng)建出來。不著急,故又稱為“懶漢模式”),常見的實現(xiàn)方法就是在get方法中進行new實例化。

class Player{
    public int  count;
    //2.創(chuàng)建靜態(tài)變量
    private static  Player shared=null;
    //1.構造方法私有化
    private Player(){

    }
    //3.提供給外部一個訪問的方法
    public static Player getInstance(){
        Object b =new Object();
       synchronized ((b)){
           if(shared==null){
               shared=new Player();
           }
       }
       return shared;
    }
}

“懶漢模式”的優(yōu)缺點:
優(yōu)點:實現(xiàn)起來比較簡單,當類SingletonTest被加載的時候,靜態(tài)變量static的instance未被創(chuàng)建并分配內(nèi)存空間,當getInstance方法第一次被調(diào)用時,初始化instance變量,并分配內(nèi)存,因此在某些特定條件下會節(jié)約了內(nèi)存。
缺點:在多線程環(huán)境中,這種實現(xiàn)方法是完全錯誤的,根本不能保證單例的狀態(tài)。
我們在所寫的demo里面采用的是惡漢模式,為了避免使用懶漢模式是有可能發(fā)生的不不必要的錯誤

敲代碼的感悟

在我們所寫的Dome里面我印象最深的就是類里面方法的使用,我們所寫的方法很多但是都是我都能看懂的方法,但是在這樣一個目前來說我們接觸過的最大的dome,里面一個方法不僅僅只是一個方法,還有方法之間的互相使用,還有一個對象對一個屬性的引用,或許正是因為這種原因,使我在閱讀代碼的時候常常會有一些疑惑,閱讀起來就像是剝繭抽絲一樣,我也就感受到了這個代碼的難度。但是我想這應該是一道我應該克服的障礙。想來也是自己的邏輯性有點差。由于自己還沒有完全搞懂所以就不上代碼了。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,626評論 1 32
  • 【學習難度:★☆☆☆☆,使用頻率:★★★★☆】直接出處:單例模式梳理和學習:https://github.com/...
    BruceOuyang閱讀 736評論 1 2
  • 1.設計模式是什么? 你知道哪些設計模式,并簡要敘述?設計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型...
    龍飝閱讀 2,296評論 0 12
  • 整理來自互聯(lián)網(wǎng) 1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工具...
    Ncompass閱讀 1,617評論 0 6
  • 《莫稱之為夜晚》。 1·故事的回歸線 詩意緩緩啊。讀了兩遍。這是一個以色列的作家,用希伯來文,書寫的一個溫柔、克制...
    坊里少掌柜的閱讀 361評論 0 0

友情鏈接更多精彩內(nèi)容