国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 幫助中心 > 正文

php設(shè)計(jì)模式之抽象工廠模式分析【星際爭(zhēng)霸游戲案例】

2024-07-09 22:43:11
字體:
供稿:網(wǎng)友

本文實(shí)例講述了php設(shè)計(jì)模式之抽象工廠模式。分享給大家供大家參考,具體如下:

星際爭(zhēng)霸是戰(zhàn)略游戲,所以同樣的兵種,敵我顯示是不同的。
典型的就是鼠標(biāo)的顏色,點(diǎn)中自己的物體的時(shí)候,鼠標(biāo)顏色變成綠色,點(diǎn)中敵人的物體的時(shí)候,鼠標(biāo)顏色變成紅色。
還有就是每個(gè)物體的狀態(tài),點(diǎn)中自己的物體的時(shí)候,狀態(tài)區(qū)顯示完整的狀態(tài),點(diǎn)中敵人的物體的時(shí)候,狀態(tài)區(qū)顯示一部分信息。
我們假設(shè)只考慮鼠標(biāo)和人族的運(yùn)輸船,玩家自己的運(yùn)輸船點(diǎn)中后狀態(tài)區(qū)會(huì)顯示里面裝載的部隊(duì),而點(diǎn)中敵人的則不會(huì)顯示里面是否裝載部隊(duì)。
這樣我們就有四種對(duì)象:點(diǎn)中自己的鼠標(biāo),點(diǎn)中敵人的鼠標(biāo),自己的運(yùn)輸船狀態(tài),敵人的運(yùn)輸船狀態(tài)。
如果用工廠方法模式,就要建立四個(gè)具體工廠(或者子工廠),這樣的代碼不便于維護(hù)和修改,因?yàn)槲覀円院笠黾恿硪环N情況:盟友。

待解決的問題:我們希望將這些對(duì)象聯(lián)系起來,使得工廠的操作更加有邏輯性。

思路:既然我們通過自己和敵人來區(qū)分對(duì)象,那么統(tǒng)一歸屬的對(duì)象放入相同的具體工廠,每個(gè)具體工廠負(fù)責(zé)制造多種對(duì)象。

抽象工廠模式示例:

<?php  //四個(gè)產(chǎn)品類  //點(diǎn)中自己的物體時(shí)的鼠標(biāo)  class mineMouse  {    //鼠標(biāo)的顏色    public $color = 'green';  }  //點(diǎn)中敵人的物體時(shí)的鼠標(biāo)  class enemyMouse  {    //鼠標(biāo)的顏色    public $color = 'red';  }  //自己的運(yùn)輸船狀態(tài)  class mineDropship  {    //顯示裝載的情況,假設(shè)2輛坦克    public $loading = '2 tanks';  }  //敵人的運(yùn)輸船狀態(tài)  class enemyDropship  {    //不顯示裝載的情況    public $loading = '';  }  //主工廠類,也叫抽象工廠類  class abstractCreator  {    //根據(jù)參數(shù)分配工作到具體的工廠,并返回具體工廠對(duì)象    public function getCreator($belong)    {      //獲取具體工廠的類名      $creatorClassName = $belong.'Creator';      //返回具體工廠對(duì)象      return new $creatorClassName();    }  }  //具體工廠必須執(zhí)行的接口  interface productCreator  {    //制造方法,或者說根據(jù)參數(shù)返回產(chǎn)品(鼠標(biāo),運(yùn)輸船)的方法    public function creatProduct($productName);  }  //制造屬于自己的物體的具體工廠,執(zhí)行接口  class mineCreator implements productCreator  {    //根據(jù)參數(shù)生產(chǎn)并返回屬于自己的產(chǎn)品    public function creatProduct($productName)    {      //獲取產(chǎn)品的類名      $productClassName = 'mine'.$productName;      //返回產(chǎn)品對(duì)象      return new $productClassName;    }  }  //制造屬于敵人的物體的具體工廠,執(zhí)行接口  class enemyCreator implements productCreator  {    //根據(jù)參數(shù)生產(chǎn)并返回屬于敵人的產(chǎn)品    public function creatProduct($productName)    {      //獲取產(chǎn)品的類名      $productClassName = 'enemy'.$productName;      //返回產(chǎn)品對(duì)象      return new $productClassName;    }  }  //開始操作  //新建抽象工廠對(duì)象  $abstractCreator = new abstractCreator();  //根據(jù)歸屬,得到具體工廠對(duì)象,這里先演示敵人的  $realCreator1 = $abstractCreator->getCreator('enemy');  //讓具體工廠對(duì)象生產(chǎn)鼠標(biāo)對(duì)象  $product1 = $realCreator1->creatProduct('Mouse');  //讓鼠標(biāo)對(duì)象顯示顏色,顯示結(jié)果red  echo $product1->color;  //根據(jù)歸屬,得到另一個(gè)具體工廠對(duì)象,這里演示自己的  $realCreator2 = $abstractCreator->getCreator('mine');  //讓具體工廠對(duì)象生產(chǎn)運(yùn)輸船  $product2 = $realCreator2->creatProduct('Dropship');  //讓運(yùn)輸船對(duì)象顯示裝載對(duì)象,顯示結(jié)果2 tanks,兩輛坦克  echo $product2->loading;?>
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 益阳市| 泰来县| 新沂市| 雅安市| 盐池县| 应用必备| 新绛县| 陇西县| 宁都县| 萝北县| 濮阳县| 涪陵区| 水城县| 博湖县| 安图县| 四子王旗| 新营市| 六盘水市| 旬邑县| 全州县| 乌拉特前旗| 罗城| 景谷| 仙游县| 永仁县| 岳普湖县| 江北区| 上高县| 武山县| 三门县| 旬邑县| 南木林县| 江北区| 台州市| 封开县| 万年县| 平凉市| 梅河口市| 积石山| 淮北市| 张掖市|