<track id="uoaij"></track>

    <bdo id="uoaij"><dfn id="uoaij"><thead id="uoaij"></thead></dfn></bdo>

        <track id="uoaij"><div id="uoaij"></div></track>
          1. <option id="uoaij"></option>

            千鋒教育-做有情懷、有良心、有品質的職業教育機構

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

            領取全套視頻
            千鋒教育

            關注千鋒學習站小程序
            隨時隨地免費學習課程

            【熱點話題】 零基礎學IT IT學習教程 IT學習筆記 IT技術干貨 IT培訓機構 IT應聘面試 IT職場就業 Java培訓機構哪些好 IT培訓問答
            當前位置:首頁  >  關于學院  >  技術干貨  > Java中的模式和單例

            Java中的模式和單例

            來源:千鋒教育
            發布人:syq
            時間: 2022-10-09 10:47:44 1665283664

              本文針對的是任何第一次遇到設計模式概念的人,他們聽說過這個術語單身人士,或者以某種方式實現了單例模式,但不明白發生了什么。CodeGym學生在15級中第一次遇到設計模式,當時船長出乎意料地要求他們通過延遲實現Java Singleton模式來“加強”他們的理解。學生聽說單身人士模式第一次立即有很多問題:到底什么是設計模式?我們為什么需要它?什么是單身人士?最后,什么是懶惰的實現?讓我們按順序回答這些問題。

            Java中的模式

              到底什么是設計模式?

              我相信一點歷史是為了以最好的理解來回答這個問題。有四位著名的編程作家(埃里希·伽馬,約翰·弗利賽德斯,拉爾夫·約翰遜和理查德·赫爾姆)提出了一個有趣的想法。他們注意到軟件開發通常需要他們解決大致相同的問題,并以相同的方式編寫結構的代碼。因此,他們決定描述在面向對象編程中經常需要使用的典型模式。他們的書于1994年出版,標題為“設計模式:可重用面向對象軟件的元素”。這本書的名字太長了,人們開始簡單地稱它為四人幫的書。第一版包括23種圖案。之后,發現了數十種其他模式。因此,讓我們用幾句話來總結這一段問題的答案(到底什么是設計模式):

              設計模式是常見問題的標準化解決方案。

              和單身人士模式只是其中之一。

              為什么我們需要設計模式?

              你可以在不知道模式的情況下進行編程:畢竟,到15級時,你已經在CodeGym上編寫了數百個小程序,甚至不知道它們的存在。這表明設計模式是一種工具,其用法將大師與業余愛好者區分開來:設計模式描述了如何正確解決典型問題。這意味著了解模式可以節省您的時間。通過這種方式,它們類似于算法。例如,您可以使用二十一點和數字創建自己的排序算法,并花費大量時間執行此操作,或者您可以實現一個已經理解和描述很長時間的算法。設計模式也是如此。

              此外,使用設計模式,代碼變得更加標準,并且在使用適當的模式時,您不太可能犯錯誤,因為模式的常見陷阱很久以前就被識別并消除了。最重要的是,對模式的了解有助于程序員更好地相互理解。你可以簡單地說出一個模式的名稱,而不是試圖向你的程序員同事提供一個冗長的解釋??偠灾?,設計模式可以幫助您:

              不是重新發明輪子,而是使用標準解決方案

              標準化代碼

              標準化術語

              在本節的最后,我們注意到整個設計模式可以分為三大組:

            11

              最后,單例模式

              單身 人士是一種創造模式。此模式確保一個類只有一個實例,并為此對象提供全局訪問點。從描述中可以清楚地看出,此模式應應用于兩種情況:

              當程序要求不應創建特定類的一個以上對象時。例如,計算機游戲可能有一個 Hero 類,而只有一個 Hero 對象來描述游戲中唯一的英雄。

              當您需要提供對對象的全局訪問點時。換句話說,您需要使對象從程序中的任何位置都可用。唉,僅僅創建一個全局變量是不夠的,因為它沒有寫保護:任何人都可以更改變量的值,因此對象的全局訪問點可能會丟失。a 的這些屬性單身 人士是必需的,例如,當您有一個與數據庫一起使用的對象,并且您需要從程序的不同部分訪問該數據庫時。一個單身 人士將確保沒有人編寫替換以前創建的實例的代碼。

              所以單身 人士滿足了這兩個需求:程序中必須只有某種對象中的一個,并且必須全局訪問它。在級別 15 的示例中,船長要求您為以下任務實現此模式:

              1.查找具有惰性初始化的單例示例。

              2.使用相同的原理在單獨的文件中創建三個單例類(太陽、月亮、地球)。

              3.在太陽、月亮和地球類中實現行星接口。

              4.在解決方案類的靜態塊中調用讀取鍵從控制臺和初始化行星方法。

              5.實現“從”從“”并初始化“方法方法功能:

              5.1. 從控制臺讀取一個字符串參數

              5.2. 如果參數等于行星接口的常量之一,請創建合適的Planet對象。

              仔細閱讀任務條件后,我們可以清楚地看到為什么單身 人士這里需要。實際上,我們被要求創建以下每個類的實例:太陽、月亮、地球,假設我們只應該創造一個太陽/月亮/地球是有道理的。否則,我們就會陷入荒謬的境地,除非你正在寫你的《星球大戰》版本。實現單身 人士Java中的模式三個步驟 在Java中,單例行為不能使用普通的構造函數來實現,因為構造函數總是返回一個新對象。因此,的所有實現單身 人士歸結為隱藏構造函數,創建控制單例對象生存期的公共靜態方法,以及“銷毀”所有新出現的對象。如果單身 人士被訪問,它應該創建一個新對象(如果程序中尚不存在),或者返回一個現有對象。要完成此操作,請執行以下操作:

              1.您需要為該類提供一個存儲單個對象的私有靜態字段:

            12

              2.將(默認)構造函數設為私有。這意味著無法在類外部訪問它,并且無法返回新對象:

            13

              3.聲明一個靜態創建方法,該方法將用于獲取單例:

            14

              上面的例子有點笨拙,因為我們只是隱藏了構造函數,提供了我們自己的方法,而不是一個標準的構造函數。由于本文旨在確保 CodeGym 學生接觸到這種模式(以及一般的設計模式),因此這里將不介紹更復雜的單例實現的細微差別。我們只注意到,根據程序的復雜性,此模式可能需要進一步完善。例如,在多線程環境中(請參閱有關線程的文章),多個不同的線程可能會同時訪問單例方法,并且上述代碼將停止工作,因為每個單獨的線程都可以創建類的實例。因此,仍然有幾種不同的方法來創建適當的線程安全單例。但那是另一個故事=)

              延遲初始化也稱為延遲初始化。這是一種編程技巧,其中資源密集型操作(并且創建對象是資源密集型操作)是按需執行的,而不是提前執行的。那么在我們的單身人士Java代碼?換句話說,我們的對象是在訪問它的時候創建的,而不是提前創建的。你不應該假設懶惰的初始化以某種方式與單身 人士模式。惰性初始化也用于其他創建設計模式,例如代理和工廠方法,但這也是另一個故事=)

            聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

            10年以上業內強師集結,手把手帶你蛻變精英

            請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通

            免費領取

            今日已有369人領取成功

            劉同學 138****2860 剛剛成功領取
            王同學 131****2015 剛剛成功領取
            張同學 133****4652 剛剛成功領取
            李同學 135****8607 剛剛成功領取
            楊同學 132****5667 剛剛成功領取
            岳同學 134****6652 剛剛成功領取
            梁同學 157****2950 剛剛成功領取
            劉同學 189****1015 剛剛成功領取
            張同學 155****4678 剛剛成功領取
            鄒同學 139****2907 剛剛成功領取
            董同學 138****2867 剛剛成功領取
            周同學 136****3602 剛剛成功領取

            猜你喜歡LIKE

            最新文章NEW

            相關推薦HOT

            更多>>
            日本熟妇色XXXXX日本免费看
            <track id="uoaij"></track>

              <bdo id="uoaij"><dfn id="uoaij"><thead id="uoaij"></thead></dfn></bdo>

                  <track id="uoaij"><div id="uoaij"></div></track>
                    1. <option id="uoaij"></option>