<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                第12章 代理模式 12.1 我是游戲至尊 2007年,感覺很無聊,于是就玩了一段時間的網絡游戲,游戲名就不說了,反正就是打怪、升級、砍人、被人砍,然后繼續打怪、升級、打怪、升級……我花了兩個月的時間升到80級,已經很有成就感了,但是還會被人殺死,高手到處都是,GM(Game Master,游戲管理員)也不管,對于咱這種非RMB玩家基本上都是懶得搭理。在這段時間我是體會到網絡游戲的樂與苦,參與家族(工會)攻城,勝利后那叫一個樂呀,感覺自己真是一個“狂暴戰士”,無往不勝!那苦是什么呢?就是升級,為了升一級,就要到處殺怪,做任務,那個游戲還很變態,外掛管得很嚴,基本上出個外掛,沒兩天就開始封賬號,不敢用,升級基本上都要靠自己手打,累呀!我曾經的記錄是連著打了23個小時,睡覺在夢中還和大BOSS在PK。有這樣一段經歷還是很有意思的,作為架構師是不是可以把這段經歷通過架構的方式記錄下來呢?當然可以了,我們把這段打游戲的過程系統化,非常簡單的一個過程,如圖12-1所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036258c4a.jpg) 圖12-1 游戲過程 太簡單了,定義一個接口IGamePlayer,是所有喜愛網絡游戲的玩家,然后定義一個具體的實現類GamePlayer,實現每個游戲愛好者為了玩游戲要執行的功能。代碼也非常簡單,我們先來看IGamePlayer,如代碼清單12-1所示。 代碼清單12-1 游戲者接口 public?interface?IGamePlayer?{ ?????//登錄游戲 ?????public?void?login(String?user,String?password); ?????//殺怪,網絡游戲的主要特色 ?????public?void?killBoss(); ?????//升級 ?????public?void?upgrade(); } 非常簡單,定義了三個方法,分別是我們在網絡游戲中最常用的功能:登錄游戲、殺怪和升級,其實現類如代碼清單12-2所示。 代碼清單12-2 游戲者 public?class?GamePlayer?implements?IGamePlayer?{ ?????private?String?name?=?""; ?????//通過構造函數傳遞名稱 ?????public?GamePlayer(String?_name){ ?????????????this.name?=?_name; ?????} ?????//打怪,最期望的就是殺老怪 ?????public?void?killBoss()?{ ?????????????System.out.println(this.name?+?"在打怪!"); ?????} ?????//進游戲之前你肯定要登錄吧,這是一個必要條件 ?????public?void?login(String?user,?String?password)?{ ?????????????System.out.println("登錄名為"+user+"的用戶"+this.name+"登錄成功!"); ?????} ?????//升級,升級有很多方法,花錢買是一種,做任務也是一種 ?????public?void?upgrade()?{ ?????????????System.out.println(this.name?+?"?又升了一級!"); ?????} } 在實現類中通過構造函數傳遞進來玩家姓名,方便進行后期的調試工作。我們通過一個場景類來模擬這樣的游戲過程,如代碼清單12-3所示。 代碼清單12-3 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//定義一個癡迷的玩家 ?????????????IGamePlayer?player?=?new?GamePlayer("張三"); ?????????????//開始打游戲,記下時間戳 ?????????????System.out.println("開始時間是:2009-8-25?10:45"); ?????????????player.login("zhangSan",?"password"); ?????????????//開始殺怪 ?????????????player.killBoss(); ?????????????//升級 ?????????????player.upgrade(); ?????????????//記錄結束游戲時間 ?????????????System.out.println("結束時間是:2009-8-26?03:40"); ?????} } 程序記錄了游戲的開始時間和結束時間,同時也記錄了在游戲過程中都需要做什么事情,運行結果如下: 開始時間是:2009-8-25 10:45 登錄名為zhangSan 的用戶 張三登錄成功! 張三在打怪! 張三 又升了一級! 結束時間是:2009-8-26 03:40 運行結果也是我們想要的,記錄我這段時間的網游生涯。心理學家告訴我們,人類對于苦難的記憶比對喜悅的記憶要深刻,但是人類對于喜悅是“趨利”性的,每個人都想Happy,都不想讓苦難靠近,要想獲得幸福,苦難也是在所難免的,我們的網游生涯也是如此。游戲打時間長了,腰酸背痛、眼睛干澀、手臂酸麻,等等,也就是網絡成癮綜合癥都出來了。其結果就類似吃了那個“一日喪命散”,“筋脈逆流,胡思亂想,而致走火入魔”。那怎么辦呢?我們想玩游戲,但又不想碰觸到游戲中的煩惱,如何解決呢?有辦法,現在游戲代練的公司非常多,我把自己的賬號交給代練人員,由他們去幫我升級,去打怪,非常好的想法,我們來修改一下類圖,如圖12-2所示。 ![](https://box.kancloud.cn/2016-08-14_57b003626d90b.jpg) 圖12-2 游戲代練幫忙打怪 在類圖中增加了一個GamePlayerProxy類來代表游戲代練者,它也不能有作弊的方法呀,游戲代練者也是手動打怪呀,因此同樣繼承IGamePlayer接口,其實現如代碼清單12-4所示。 代碼清單12-4 代練者 public?class?GamePlayerProxy?implements?IGamePlayer?{ ?????private?IGamePlayer?gamePlayer?=?null;????? ?????//通過構造函數傳遞要對誰進行代練 ?????public?GamePlayerProxy(IGamePlayer?_gamePlayer){ ?????????????this.gamePlayer?=?_gamePlayer; ?????} ?????//代練殺怪 ?????public?void?killBoss()?{ ?????????????this.gamePlayer.killBoss(); ?????} ?????//代練登錄 ?????public?void?login(String?user,?String?password)?{ ?????????????this.gamePlayer.login(user,?password); ?????} ?????//代練升級 ?????public?void?upgrade()?{ ?????????????this.gamePlayer.upgrade(); ?????} } 很簡單,首先通過構造函數說明要代誰打怪升級,然后通過手動開始代用戶打怪、升級。場景類Client代碼也稍作改動,如代碼清單12-5所示。 代碼清單12-5 改進后的場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//定義一個癡迷的玩家 ?????????????IGamePlayer?player?=?new?GamePlayer("張三"); ?????????????//然后再定義一個代練者 ?????????????IGamePlayer?proxy?=?new?GamePlayerProxy(player); ?????????????//開始打游戲,記下時間戳 ?????????????System.out.println("開始時間是:2009-8-25?10:45"); ?????????????proxy.login("zhangSan",?"password"); ?????????????//開始殺怪 ?????????????proxy.killBoss(); ?????????????//升級 ?????????????proxy.upgrade(); ?????????????//記錄結束游戲時間 ?????????????System.out.println("結束時間是:2009-8-26?03:40"); ?????} } 運行結果也完全相同,還是張三這個用戶在打怪,運行結果如下: 開始時間是:2009-8-25 10:45 登錄名為zhangSan 的用戶 張三登錄成功! 張三在打怪! 張三 又升了一級! 結束時間是:2009-8-26 03:40 是的,沒有任何改變,但是你有沒有發覺,你的游戲已經在升級,有人在幫你干活了!終于升級到120級,基本上在本服務區,除了GM外,這個你可惹不起!這就是代理模式。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看