詳細(xì)例子:
讓我們?cè)谝幌赂訌?fù)雜的例子中查看值對(duì)象模式的功能。
讓我們開(kāi)始實(shí)現(xiàn)一個(gè)的基于PHP5中Dollar類(lèi)中的一個(gè)Monopoly游戲。
第一個(gè)類(lèi)Monopoly的框架如下:
class Monopoly { protected $go_amount; /** * game constructor * @return void */ public function __construct() { $this->go_amount = new Dollar(200); } /** * pay a player for passing 揋o?/span> * @param Player $player the player to pay * @return void */ public function passGo($player) { $player->collect($this->go_amount); } }
目前,Monopoly的功能比較簡(jiǎn)單。構(gòu)造器創(chuàng)建一個(gè)Dollar類(lèi)的實(shí)例$go_amount,設(shè)定為200,實(shí)例go_amount常常被passtGo()函數(shù)調(diào)用,它帶著一個(gè)player參數(shù),并讓對(duì)象player的函數(shù)collect為player機(jī)上200美元.
Player類(lèi)的聲明請(qǐng)看下面代碼,Monoplay類(lèi)調(diào)用帶一個(gè)Dollar參數(shù)的Player::collect()方法。然后把Dollar的數(shù)值加到Player的現(xiàn)金余額上。另外,通過(guò)判斷Player::getBalance()方法函數(shù)返回來(lái)的余額,我們可以知道使訪(fǎng)問(wèn)當(dāng)前Player和Monopoly對(duì)象實(shí)例是否在工作中。
class Player { protected $name; protected $savings; /** * constructor * set name and initial balance * @param string $name the players name * @return void */ public function __construct($name) { $this->name = $name; $this->savings = new Dollar(1500); } /** * receive a payment * @param Dollar $amount the amount received * @return void */ public function collect($amount) { $this->savings = $this->savings->add($amount); } * return player balance * @return float */ public function getBalance() { return $this->savings->getAmount(); } }
上邊已經(jīng)給出了一個(gè)Monopoly和Player類(lèi),你現(xiàn)在可以根據(jù)目前聲明的幾個(gè)類(lèi)定義進(jìn)行一些測(cè)試了。
MonopolyTestCase的一個(gè)測(cè)試實(shí)例可以像下面這樣寫(xiě):
class MonopolyTestCase extends UnitTestCase { function TestGame() { $game = new Monopoly; $player1 = new Player(‘Jason’); $this->assertEqual(1500, $player1->getBalance()); $game->passGo($player1); $this->assertEqual(1700, $player1->getBalance()); $game->passGo($player1); $this->assertEqual(1900, $player1->getBalance()); } }
如果你運(yùn)行MonopolyTestCase這個(gè)測(cè)試代碼,代碼的運(yùn)行是沒(méi)有問(wèn)題的,F(xiàn)在可以添加一些新的功能。
出處:phpchina
責(zé)任編輯:bluehearts
上一頁(yè) php設(shè)計(jì)模式介紹之值對(duì)象模式 [2] 下一頁(yè) php設(shè)計(jì)模式介紹之值對(duì)象模式 [4]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|