一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

php設計模式之中介者模式分析【星際爭霸游戲案例】

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

這篇文章主要介紹了php設計模式之中介者模式,結合具體案例形式分析了星際爭霸游戲中使用PHP中介者模式的相關操作技巧,需要的朋友可以參考下

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

星際的升級系統做得比較平衡,不過由于不少兵種和建筑的制造都需要有相關的科技建筑,所以關系比較復雜。
比如一個科學站造出來后,所有的飛機場都可以建造科技球了,但是一旦一個科學站被摧毀,就要看是否還有科學站,否則就得讓所有的飛機場都不能造科技球。
我們可以用上次說的觀察者模式解決問題,不過由于星際里面的升級相關比較多,似乎比較麻煩。
其實從實質來講,任何升級一般只要知道某種建筑是否存在就行了,因此我們不必讓他們多對多聯系,設置一個中介者就行了。
這就好像我們不管買什么東西,到超市就可以了,而廠家也只要和超市聯系,不必和我們每個消費者直接接觸。

待解決的問題:不要讓各個建筑互相聯系,減少復雜程度。

思路:設置中介者,每次遇到制造科技相關的東西,詢問中介者。

中介者(Mediator)模式示例:

?
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
<?php
  //中介者
  class Mediator
  {
    //存放科技建筑的數量,為了簡單說明,用靜態屬性,其實也可以讓各個對象來處理
    public static $techBuilding;
    //根據參數$techBuildingName代表的建筑名稱,返回是否存在相應的科技建筑,為了簡單說明,用靜態屬性
    public static function isTechAllow ($techBuildingName)
    {
      //如果科技建筑數量大于零,就返回true,否則返回false
      return self::$techBuilding[$techBuildingName]>0;
    }
    //一旦科技建筑造好了或者被摧毀,調用這個方法,參數$techBuildingName代表建筑名稱,$add為布爾值,true表示增加(建造),false代表減少(摧毀)
    public static function changeTech ($techBuildingName, $add)
    {
      //建造
      if ($add)
      {
        //增加數量
        self::$techBuilding[$techBuildingName]++;
      }
      else
      {
        //減少數量
        self::$techBuilding[$techBuildingName]--;
      }
    }
  }
  //科技站類
  class ScienceFacility
  {
    //構造方法
    public function __construct()
    {
      Mediator::changeTech('ScienceFacility', true);
    }
    //析構方法
    public function __destruct()
    {
      Mediator::changeTech('ScienceFacility', false);
    }
  }
  //飛機場類
  class Starport
  {
    //制造科技球的方法
    public function createScienceVessel ()
    {
      //詢問中介者,決定是否能制造科技球
      echo Mediator::isTechAllow('ScienceFacility') ? '可以制造科技球' : '不能制造科技球';
    }
  }
  //造一個科技站
  $scienceFacility1 = new ScienceFacility();
  //再造一個科技站
  $scienceFacility2 = new ScienceFacility();
  //造一個飛機場
  $starport = new Starport();
  //建造科技球,結果是能夠
  $starport->createScienceVessel();
  echo "<br/>";
  //一個科技站被摧毀
  unset($scienceFacility1);
  //這時建造科技球,結果是能夠,因為還有一個科技站
  $starport->createScienceVessel();
  echo "<br/>";
  //另一個科技站被摧毀
  unset($scienceFacility2);
  //這時建造科技球,結果是不行
  $starport->createScienceVessel();
?>

運行結果:

可以制造科技球
可以制造科技球
不能制造科技球

用途總結:中介者模式可以減少各個對象的通訊,避免代碼相互關聯。

實現總結:中介者模式比較靈活,一般只要有中介者類和需要被協調的類,具體設計看遇到的問題。

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看日本视频 | 亚洲精品青青草原avav久久qv | 边摸边操 | 校园全肉高h湿一女多男 | 亚1洲二区三区四区免费 | 亚洲七七久久综合桃花 | 千金在线观看 | 久久久高清国产999尤物 | 日韩精品欧美国产精品亚 | 亚洲精彩视频在线观看 | 91麻豆国产福利在线观看 | 香蕉草莓视频 | 日本狠狠操 | 99亚洲 | 调教女警花穿环上班 | 息与子中文字幕完整在线 | 成年女人毛片免费观看97 | 99精品国产自在现线观看 | xxx美国| 亚洲琪琪 | 欧美男男gaysgays | 色婷婷在线 | 精品久久久久久 | 欧美日韩亚洲区久久综合 | 精品无人区乱码1区2区3区免费 | 午夜福利自怕 | 喜欢老头吃我奶躁我的动图 | 国产一区二区不卡 | 日本高清免费观看 | 国产白虎 | 国内精品国语自产拍在线观看55 | 日本中文字幕一区二区三区不卡 | 久久中文字幕无线观看 | 国产成人久久久精品一区二区三区 | 色先锋影音资源 | 精品一区久久 | 色综合久久六月婷婷中文字幕 | 国产一区私人高清影院 | 亚拍一区| 国产精品成人va在线观看 | 超强台风免费观看完整版视频 |