国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

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

php設計模式之工廠方法模式分析【星際爭霸游戲案例】

2020-07-09 14:20DavidHHuan PHP教程

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

本文實例講述了php設計模式工廠方法模式。分享給大家供大家參考,具體如下:

PHP手冊上提到的工廠模式,其實是簡單工廠模式。這里來討論簡單工廠模式的擴展:工廠方法模式。

待解決的問題:雖然簡單工廠解決了動態返回不同類型對象的問題,但是實際情況當中,往往在新建一個對象的時候,需要做一些額外處理,比如制造機槍兵的時候需要判斷水晶礦是否大于50,而制造火焰兵的時候需要同時判斷水晶礦是否大于50和氣礦大于25,還有是否建造了研究院。如果把這些代碼全部放到工廠制造類里面,會使得制造類很臃腫,而且隨著工廠生產的對象的種類越來越多,工廠制造類的代碼會越來越難以維護。

思路:簡單工廠模式中的工廠類(兵種制造器的類)保持不變,增加一個制造接口,定義一個實際制造對象的方法,然后定義各個具體制造不同對象的工廠,同時要求這些工廠執行這個制造接口,讓這些工廠去實現實際制造對象的方法。

工廠方法模式示例:

我們把機槍兵類和制造機槍兵的類的代碼放入一個文件,Marine.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
<?php
  //機槍兵類
  class Marine
  {
    //機槍兵攻擊的方法
    public function attack()
    {
      echo 'Marine attack';
    }
  }
  //制造機槍兵的類,執行接口abstractCreator
  class MarineCreator implements abstractCreator
  {
    //實際制造機槍兵的方法
    public function realCreate()
    {
      //如果水晶礦大于50,這里只是作為說明,因為并不存在ore這個變量,也不考慮水晶少于50的處理
      if($ore>50)
      {
        return new Marine();
      }
    }
  }
?>

我們把火焰兵類和制造火焰兵的類的代碼放入一個文件,Firebat.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
<?php
  //火焰兵類
  class Firebat
  {
    //火焰兵攻擊的方法
    public function attack()
    {
      echo 'Firebat attack';
    }
  }
  //制造火焰兵的類,執行接口abstractCreator
  class FirebatCreator implements abstractCreator
  {
    //實際制造火焰兵的方法
    public function realCreate()
    {
      //如果水晶礦大于50同時氣礦大于25,并且研究院已經存在。這里只是作為說明,因為并不存在ore和gas和Academy變量,也不考慮資源不夠時的處理
      if($ore>50 && $gas>25 && Academy>1)
      {
        return new Firebat();
      }
    }
  }
?>

主文件中的內容如下:

?
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
<?php
  //各個具體工廠必須執行的接口
  interface abstractCreator
  {
    //規定各個具體工廠要實現的方法
    public function realCreate();
  }
  //兵種制造器的類,也就是主工廠
  class BarracksCreator
  {
    //制造兵種的方法
    public create($createWhat)
    {
      //根據輸入的參數,動態的把需要的類的定義文件載入
      require_once($createWhat.'.php');
      //根據輸入的參數,動態的獲取相應的具體工廠的類的名字
      $creatorClassName = $createWhat.'Creator';
      //新建具體工廠對象
      $creator = new $creatorClassName;
      //用具體工廠來實際生產,然后返回需要的類的對象。因為它們都執行了接口abstractCreator,所以肯定實現了方法realCreate()
      return $creator->realCreate();
    }
  }
  //新建一個兵種制造器對象
  $creator = new BarracksCreator();
  //靠接收參數制造一個火焰兵對象
  $troop1 = $creator->create('Marine');
  $troop1->attack();
  //靠接收參數制造一個機槍兵對象
  $troop2 = $creator->create('Firebat');
  $troop2->attack();
?>

用途總結:工廠方法模式將新建對象的任務將給對應的具體工廠類,不必因為某些生產的對象需要進行額外處理而修改對外的主工廠。

實現總結:需要接收參數的主工廠類,比如上面兵種制造器BarracksCreator,還需要聲明具體制造方法的一個接口,比如上面abstractCreator,然后定義具體生產各個產品的具體工廠類,每個具體工廠類必須執行接口abstractCreator,這樣他們就必須實現制造對象的方法,比如上面的realCreate()。使用的時候只需要將參數傳遞給主工廠類工廠的生產方法create(),然后由create()根據參數生成具體工廠類的對象,并調用具體工廠類realCreate()獲取制造的產品對象并返回,對外界使用來說,只需調用主工廠類工廠進行生產。
說明:其實這篇文章內的工廠方法模式和有些文章寫的不同,標準的工廠模式往往是用一個抽象類來代替上面的接口abstractCreator,然后讓所有的具體工廠類來繼承它,但使用的時候,由于抽象類不能實例化(新建它的對象),所以經常是代碼中直接new FirebatCreator(),但是簡單工廠模式可以解決直接new的問題,所以我這里將簡單工廠模式和工廠方法模式一起使用,使這里的示例更加實用。同時由于PHP是單繼承,而執行接口的數量是沒有限制的,所以使用接口abstractCreator更加靈活。

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 在线成人av | 欧美在线观看视频 | 久久久99国产精品免费 | 亚洲黄色片免费看 | 自拍视频网 | 久久国产精品久久久久久电车 | 欧美,日韩,国产精品免费观看 | 99久久精品免费看国产一区二区三区 | 久久国产精品久久久久久 | 国产伦精品一区二区三区精品视频 | 日韩免费在线观看视频 | 91午夜在线| 在线观看国产成人av片 | 亚洲国产一区二区三区日本久久久 | 久久国产精品久久久久久电车 | 国产精品区一区二区三区 | 国产一区二区欧美 | 欧美综合激情 | 亚洲精品久久久久999中文字幕 | 日韩欧美国产一区二区三区 | 国产欧美日韩二区 | 亚洲第十页 | 国产片在线观看 | 中文二区 | 在线观看国产一区二区 | 在线无吗 | 精品国产99| 久久97视频 | 九色av | 精品无码久久久久久国产 | 尤物视频在线观看 | 精品国产91亚洲一区二区三区www | 国产成人片 | 国产精品777 | 成人a免费 | 日韩成人精品在线观看 | 亚洲精品日本 | 男人的天堂久久 | 亚洲欧美在线一区 | 中文字幕亚洲视频 | 秋霞电影院午夜伦 |