1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【1/25】將Game改寫為單例模式(Singleton Pattern)

        共 1003字,需瀏覽 3分鐘

         ·

        2021-01-28 23:40

        00586856f3ee1bd86b82b2243ca7b9d7.webp

        這是《小游戲從0到1設(shè)計模式重構(gòu)》系列內(nèi)容第1篇,所有源碼及資料在“程序員LIYI”公號回復(fù)“小游戲從0到1”獲取。

        Game的實(shí)例在游戲時只有一個,現(xiàn)在我們首先將Game類改造為一個單例。所謂單例,就是運(yùn)行時只有一個實(shí)例。Game.js代碼改造如下:

        ?

        // 游戲?qū)ο?br />class Game {
        // 單例
        static getInstance() {
        if (!this.instance) {
        this.instance = new Game()
        }
        return this.instance;
        }
        ...

        ?

        但是這個代碼是有問題的,因為我們在Game.js文件的下方通過new關(guān)鍵字實(shí)例化過這個類:

        ?

        /// 開始
        const game = new Game()
        GameGlobal.game = game
        game.init()
        game.start()

        ?

        有兩種方法解決這個問題。一種是修改單例方法getInstance代碼的實(shí)現(xiàn),將全局單例的實(shí)例化放在結(jié)構(gòu)器中:

        ?

        class Game {
        // 單例
        static getInstance() {
        // if (!this.instance) {
        // this.instance = new Game()
        // }
        return this.instance;
        }
        ...
        constructor() {
        if (!Game.instance) {
        Game.instance = this
        }
        }
        ...

        ?

        另一種方法是修改Game.js文件的底部代碼,在消費(fèi)代碼處實(shí)例化Game類的方式:

        ?

        /// 開始
        // const game = new Game()
        const game = Game.getInstance()
        GameGlobal.game = game
        ...

        ?

        我們在這里采用第二種方法。將Game單例化,將為我們接下來應(yīng)用其它設(shè)計模式打下基礎(chǔ)。除了可以使用Game.getInstance()獲取當(dāng)前游戲的實(shí)例,還可以通過全局變量GameGlobal.game獲取,第二種獲取方式我們將在下一小節(jié)使用。

        ?

        階段源碼


        本小節(jié)階段源碼見:disc/第五章/5.1.1。


        我講明白沒有,歡迎提問。

        2021年1月26日

        瀏覽 50
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            超碰国内自拍 | 内射白浆视频 | 日韩激情无码 | 伦理片在线播放无遮无挡 | 黄色录相毛片 | 国产91对白在线观看九色 | 国产无码成人电影 | 永久免费精品二区三区 | 黄网入口 | 迷情校园综合 |