激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php設計模式之代理模式分析【星際爭霸游戲案例】

php設計模式之代理模式分析【星際爭霸游戲案例】

2020-06-06 15:48DavidHHuan PHP教程

這篇文章主要介紹了php設計模式之代理模式,結合星際爭霸游戲案例形式分析了PHP設計模式中代理模式的相關原理、使用方法與操作注意事項,需要的朋友可以參考下

本文實例講述了php設計模式之代理模式。分享給大家供大家參考,具體如下:

星際爭霸如果是多人對戰模式,就會遇到一個問題:如何降低網絡延時和負擔。

為了確保數據的一致性,我們應該將每個玩家的發生變化的數據不停的傳送到開地圖的主機進行保存,一旦任何某個玩家的客戶機讀取數據,就必須向主機請求數據。

盡管大多數數據是交互性的,即使某個玩家的人口也是這樣的,如果某個敵人的部隊殺死了這個玩家的一個部隊,立即影響了他的人口數量。

不過水晶礦和氣礦有所不同,除了玩家自己的建造操作和農民采集,別的玩家影響不了這個數據。

所以我們考慮在客戶機也放一個數據存儲,玩家改變或者讀取他的資源的時候,先操作本機數據,再通知主機。

代理(Proxy)模式示例:

為了方便,假設客戶機已經通過遠程包含或其他方法獲取了主機上的php代碼,它的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
  //客戶機和主機操作數據時共同要實現的借口
  interface iDataProcess
  {
    //獲取數據的方法,$ID表示玩家的ID,$dataName表示獲取的數據的名稱
    public function getData($ID, $dataName);
 
    //改變數據的方法,$ID表示玩家的ID,$dataName表示要改變的數據的名稱,$dataValue表示改變后的數據的值
    public function updateData($ID, $dataName, $dataValue);
  }
 
  //主機操作數據的類
  class DataProcess implements iDataProcess
  {
    // 獲取數據的方法,$ID表示玩家的ID,$dataName表示獲取的數據的名稱
    public function getData($ID, $dataName)
    {
      //操作數據庫之類的代碼
    }
 
    //改變數據的方法,$ID表示玩家的ID,$dataName表示要改變的數據的名稱,$dataValue表示改變后的數據的值
    public function updateData($ID, $dataName, $dataValue)
    {
      //操作數據庫之類的代碼
    }
  }
 
  //客戶機操作數據的類,也就是代理類
  class ProxyDataProcess implements iDataProcess
  {
  //主機操作數據的對象
    private $dataProcess;
 
    //構造函數
    public function __construct()
    {
      $this->dataProcess = new DataProcess();
    }
 
    // 獲取數據的方法,$ID表示玩家的ID,$dataName表示獲取的數據的名稱
    public function getData($ID, $dataName)
    {
      //判斷是否直接向主機請求
      switch ($dataName)
      {
        //如果查詢水晶礦
        case 'ore':
          //直接從客戶機保存的數據讀取,詳細代碼略過
          break;
        //如果查詢氣礦
        case 'gas':
          //直接從客戶機保存的數據讀取,詳細代碼略過
          break;
        default:
          $this->dataProcess->getData($ID, $dataName);
          break;
      }
    }
 
    //改變數據的方法,$ID表示玩家的ID,$dataName表示要改變的數據的名稱,$dataValue表示改變后的數據的值
    public function updateData($ID, $dataName, $dataValue)
    {
      //和讀取的思路類似,如果是水晶礦或氣礦,就先寫入客戶機的數據存儲,再告訴主機修改
    }
  }
 
  //新建一個客戶機處理數據的對象
  $proxyDataProcess = new ProxyDataProcess();
 
  //假如顯示本玩家自己的氣礦剩余數量
  $proxyDataProcess->getData(3, 'gas');
?>

用途總結:代理模式可以將讓客戶操作一個代理的類,進行一些降低資源消耗的工作,也可以完成比如權限驗證的工作。

實現總結:需要一個接口來規定實際和代理操作類都必須實現的方法,比如上面iDataProcess,另外就是實際處理的類,比如上面DataProcess,以及讓客戶使用的代理操作類,比如上面的ProxyDataProcess。其實代理模式可以有多種用法,這里限于篇幅,只討論了降低數據操作的負荷。

希望本文所述對大家PHP程序設計有所幫助。

原文鏈接:https://www.cnblogs.com/davidhhuan/p/4248188.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩视频不卡 | 国产91九色| 国产精品99久久久久久大便 | 91 在线| 一级电影在线免费观看 | 久久男人的天堂 | 久久精品小短片 | 欧美日韩中文字幕在线视频 | 鲁丝一区二区三区不属 | 午夜精品在线视频 | 久久久久女人精品毛片 | 国产99免费 | 叉逼视频 | 久久久久久久久成人 | 99精美视频 | 久久久综合| 欧美18xxxx | 色的综合 | 精品成人免费视频 | 蜜桃视频观看麻豆 | 色综合精品| 国产成人av免费 | 欧美14一15sex性hd | 色8久久| 成人在线观看一区二区三区 | 欧洲成人一区 | 毛片免费视频播放 | 欧美在线成人影院 | 国产一区二区免费在线观看 | 亚洲成人黄色片 | 精品在线一区二区三区 | 亚洲网站免费 | 日本不卡一区在线观看 | 国产精品久久久久久模特 | 91看片在线观看视频 | 国产女厕一区二区三区在线视 | 欧美成人理论片乱 | 久久久鲁 | 日本一区二区视频在线观看 | 激情亚洲一区二区三区 | 日韩三级伦理在线观看 |