php設(shè)計模式介紹之值對象模式第3/5頁
更新時間:2008年04月13日 22:10:17 作者:
在所有的最簡單的程序中,大多數(shù)對象都有一個標(biāo)識,一個重要的商業(yè)應(yīng)用對象,例如一個Customer或者一個SKU,有一個或者更多的屬性---id,name,email地址,這樣可以把它從同一個類的其他實例區(qū)分開來。此外,對象有一個恒定的標(biāo)識:它是貫穿于整個應(yīng)用程序的一個唯一的標(biāo)識,對于程序員來說,”customer A”在任何地方就是”customer A”,并且只要你的程序在持續(xù)運行時"customer A"仍然是"customer A"。 但是一個對象不需要有一個標(biāo)識。有些對象僅僅是為了描述其他對象的屬性。
詳細(xì)例子:
讓我們在一下更加復(fù)雜的例子中查看值對象模式的功能。
讓我們開始實現(xiàn)一個的基于PHP5中Dollar類中的一個Monopoly游戲。
第一個類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的功能比較簡單。構(gòu)造器創(chuàng)建一個Dollar類的實例$go_amount,設(shè)定為200,實例go_amount常常被passtGo()函數(shù)調(diào)用,它帶著一個player參數(shù),并讓對象player的函數(shù)collect為player機上200美元.
Player類的聲明請看下面代碼,Monoplay類調(diào)用帶一個Dollar參數(shù)的Player::collect()方法。然后把Dollar的數(shù)值加到Player的現(xiàn)金余額上。另外,通過判斷Player::getBalance()方法函數(shù)返回來的余額,我們可以知道使訪問當(dāng)前Player和Monopoly對象實例是否在工作中。
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)給出了一個Monopoly和Player類,你現(xiàn)在可以根據(jù)目前聲明的幾個類定義進行一些測試了。
MonopolyTestCase的一個測試實例可以像下面這樣寫:
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());
}
}
如果你運行MonopolyTestCase這個測試代碼,代碼的運行是沒有問題的?,F(xiàn)在可以添加一些新的功能。
您可能感興趣的文章:
- php設(shè)計模式 Observer(觀察者模式)
- php設(shè)計模式 Singleton(單例模式)
- php設(shè)計模式 Command(命令模式)
- php設(shè)計模式 Composite (組合模式)
- php設(shè)計模式 Bridge (橋接模式)
- php設(shè)計模式 Chain Of Responsibility (職責(zé)鏈模式)
- php設(shè)計模式 Mediator (中介者模式)
- php設(shè)計模式 Prototype (原型模式)代碼
- php設(shè)計模式 Command(命令模式)
- 介紹php設(shè)計模式中的工廠模式
- php設(shè)計模式介紹之編程慣用法
- php設(shè)計模式 Strategy(策略模式)
- php設(shè)計模式 FlyWeight (享元模式)
- php設(shè)計模式 State (狀態(tài)模式)
- php設(shè)計模式 Proxy (代理模式)
- php設(shè)計模式 Template (模板模式)
相關(guān)文章
簡單介紹win7下搭建apache+php+mysql開發(fā)環(huán)境
這里給大家介紹的是Win7下搭建“PHP+Apache+MySql”網(wǎng)站運行環(huán)境詳細(xì)方法步驟,十分的細(xì)致全面,有需要的小伙伴可以參考下。2015-08-08在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的運行環(huán)境
這篇文章主要介紹了在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的運行環(huán)境,需要的朋友可以參考下2016-04-04php實現(xiàn)Linux服務(wù)器木馬排查及加固功能
這篇文章主要介紹了php實現(xiàn)Linux服務(wù)器木馬排查及加固功能,本文給出了根據(jù)特征碼查找、搜索最近被修改的文件、修改php.ini、修改nginx.conf等方法,需要的朋友可以參考下2014-12-12php中g(shù)et_object_vars()方法用法實例
這篇文章主要介紹了php中g(shù)et_object_vars()方法用法,實例分析了get_object_vars()方法獲取對象中屬性的使用技巧,需要的朋友可以參考下2015-02-02