“HeadFirst設(shè)計(jì)模式“:?jiǎn)卫J?/h1>

單例模式


定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。類圖如下:

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)公司專業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站開發(fā)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

“Head First 設(shè)計(jì)模式“ :?jiǎn)卫J?></p><hr /><blockquote><p>代碼實(shí)現(xiàn)如下:</p></blockquote>
<pre><code>public class Singleton {
    // 用靜態(tài)變量來(lái)記錄唯一的實(shí)例
    private static Singleton instance;
    /**
     * 構(gòu)造方法私有化,防止被創(chuàng)建,只能類內(nèi)部能使用構(gòu)造器
     */
    private Singleton() { }
    /**
     * 實(shí)例化對(duì)象,并返回這個(gè)對(duì)象
     * @return
     */
    public static Singleton getInstance() {
        if (instance == null) {
                instance = new Singleton();
        }
        return instance;
    }
    // 其他的方法
}</code></pre>
<hr /><blockquote><p>并發(fā)環(huán)境下上面的代碼會(huì)出現(xiàn)問(wèn)題的,我們進(jìn)一步修改,如下:</p></blockquote>
<pre><code>/**
 * 實(shí)例化對(duì)象,并返回這個(gè)對(duì)象
 * synchronized加鎖,可能對(duì)性能有影響哦
 * @return
 */
public static synchronized SingletonThread getInstance() {
    if (instance == null) {
                instance = new SingletonThread();
    }
    return instance;
}</code></pre><p>上面例子對(duì)性能很大的影響,那我們可以進(jìn)一步改善嗎?</p><hr /><blockquote>
<ol>
<li>如果getInstance()的性能對(duì)應(yīng)用程序不是很關(guān)鍵,就什么都別做,不要改善了</li></ol></blockquote>
<hr /><blockquote>
<ol start=

  • 使用“急切”創(chuàng)建實(shí)例,而不用延遲實(shí)例化的做法,代碼如下:
  • public class Singleton3 {
      // 靜態(tài)屬性,類加載時(shí)初始化的,JVM保證唯一
      private static Singleton3 instance = new Singleton3();
        private Singleton3() { }
        public static Singleton3 getInstance() {
            return instance;
        }
    }

    1. 使用“雙重檢查加鎖”,在getInstance()中減少使用同步,不適合JDK1.4之前的版本,代碼如下;
    public class Singleton4 {
      // 用靜態(tài)變量來(lái)記錄唯一的實(shí)例, volatile多線程環(huán)境下保用最新的值
      private volatile static Singleton4 instance;
        /**
         * 構(gòu)造方法私有化,防止被創(chuàng)建,只能類內(nèi)部能使用構(gòu)造器
         */
        private Singleton4() {
        }
        /**
         * 實(shí)例化對(duì)象,并返回這個(gè)對(duì)象
         * @return
         */
        public static Singleton4 getInstance() {
            if (instance == null) {
                synchronized (Singleton4.class) {
                    if (instance == null) {
                        instance = new Singleton4();
                    }
                }
            }
            return instance;
        }
        // 其他的方法
    }

    注意:有多個(gè)類加載器時(shí),單利可能產(chǎn)生多個(gè)哦,這個(gè)要注意哦。

    單例模式的應(yīng)用場(chǎng)景:

    • 應(yīng)用中某個(gè)實(shí)例對(duì)象需要頻繁的被訪問(wèn)。
    • 應(yīng)用中每次啟動(dòng)只會(huì)存在一個(gè)實(shí)例。如賬號(hào)系統(tǒng),數(shù)據(jù)庫(kù)系統(tǒng)。

    文章題目:“HeadFirst設(shè)計(jì)模式“:?jiǎn)卫J?/a>
    鏈接分享:
    http://muchs.cn/article18/ihspdp.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、小程序開發(fā)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站排名、網(wǎng)站改版、品牌網(wǎng)站建設(shè)

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

    h5響應(yīng)式網(wǎng)站建設(shè)