中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > php設(shè)計模式介紹之工廠模式
php設(shè)計模式介紹之單件模式 回到列表 主鍵的故事
 php設(shè)計模式介紹之工廠模式

作者:h058 時間: 2008-06-06 文檔類型:翻譯 來自:

第 1 頁 php設(shè)計模式介紹之工廠模式 [1]
第 2 頁 php設(shè)計模式介紹之工廠模式 [2]
第 3 頁 php設(shè)計模式介紹之工廠模式 [3]
第 4 頁 php設(shè)計模式介紹之工廠模式 [4]
第 5 頁 php設(shè)計模式介紹之工廠模式 [5]
第 6 頁 php設(shè)計模式介紹之工廠模式 [6]
第 7 頁 php設(shè)計模式介紹之工廠模式 [7]
第 8 頁 php設(shè)計模式介紹之工廠模式 [8]

“工廠”促進(jìn)多態(tài)

控制被送回對象的內(nèi)在狀態(tài)固然重要, 但是如果促進(jìn)多態(tài)即返回相同的接口多種類的對象,可以使得工廠模式的功能更為強(qiáng)大。

讓我們再次看一下Monopoly的例子,然后執(zhí)行購買游戲中的道具的行為。在游戲中,你的任務(wù)就是買道具,包括一些基本動作。更進(jìn)一步說, 有三種不同的道具: Street,RailRoad和Utility。所有三個類型的道具有一些共同點(diǎn): 每個道具都被一個玩家擁有; 每個都有價格;而且每個都能為它的擁有者產(chǎn)生租金只要其他的玩家在它上面登陸。但道具之間還是存在差異的,舉例來說, 計算租金的多少就取決于道具的類型。

下列的代碼展示了一個Property的基本類:

// PHP5
abstract class Property {
protected $name;
protected $price;
protected $game;
function __construct($game, $name, $price) {
$this->game = $game;
$this->name = $name;
$this->price = new Dollar($price);
}
abstract protected function calcRent();
public function purchase($player) {
$player->pay($this->price);
$this->owner = $player;
}
public function rent($player) {
if ($this->owner
&& $this->owner != $player
$player($this->calcRent())
);
}
}
}

這里, Property類和CalcRent() 方法都被聲明為基類。

注:術(shù)語 – 基類
一個基類就是不能被直接實(shí)例化的類。 一個基礎(chǔ)的類包含一個或更多的基礎(chǔ)方法,這些方法必須在子類被覆蓋。一旦所有的抽象方法被覆蓋了, 子類也就產(chǎn)生了。
基類為許多相似的類創(chuàng)造了好的原型。
CalcRent() 方法必須在子類被覆蓋,從而形成一個具體的類。因此, 每個子類包括:Street,RailRoad和Utility,和必須定義的calcRent() 方法。

為實(shí)現(xiàn)以上的情況,這三個類可以定義為:

class Street extends Property {
protected $base_rent;
public $color;
public function setRent($rent) {
$this->base_rent = new Dollar($rent);
}
protected function calcRent() {
if ($this->game->hasMonopoly($this->owner, $this->color)) {
return $this->base_rent->add($this->base_rent);
}
return $this->base_rent;
}
}
class RailRoad extends Property {
protected function calcRent() {
switch($this->game->railRoadCount($this->owner)) {
case 1: return new Dollar(25);
case 2: return new Dollar(50);
case 3: return new Dollar(100);
case 4: return new Dollar(200);
default: return new Dollar;
}
}
}
class Utility extends Property {
protected function calcRent() {
switch ($this->game->utilityCount($this->owner)) {
case 1: return new Dollar(4*$this->game->lastRoll());
case 2: return new Dollar(10*$this->game->lastRoll());
default: return new Dollar;
}
}
}

每個子類都繼承了Property類,而且包括它自己的protected ClacRent() 方法。隨著所有的基礎(chǔ)方法都被定義, 每個子類都被實(shí)例化了。

為了開始游戲, 所有的Monopoly道具必須被創(chuàng)建起來。因?yàn)檫@章是介紹工廠模式的,所有Property的類型存在很多共性,你應(yīng)該想到多態(tài)性,從而建立所有需要的對象。

我們還是以道具工廠類開始。 在我住的地方,政府的Assessor(定稅人)掌握了稅務(wù)和契約, 因此我命名它為的道具定稅工廠。下一步,這個工廠將制造全部的專有道具。在真正應(yīng)用時,所有的Monopoly道具的數(shù)值可能都取自于一個數(shù)據(jù)庫或者一個文本, 但是對于這一個例子來說, 可以僅僅用一個數(shù)組來代替:

class Assessor {
protected $prop_info = array(
// streets
‘Mediterranean Ave.’ => array(‘Street’, 60, ‘Purple’, 2)
,’Baltic Ave.’ => array(‘Street’, 60, ‘Purple’, 2)
//more of the streets...
,’Boardwalk’ => array(‘Street’, 400, ‘Blue’, 50)
// railroads
,’Short Line R.R.’ => array(‘RailRoad’, 200)
//the rest of the railroads...
// utilities
,’Electric Company’ => array(‘Utility’, 150)
,’Water Works’ => array(‘Utility’, 150)
);
}

Property子類需要實(shí)例化Monopoly道具,F(xiàn)在,我們只是簡單的用一個函數(shù)定義實(shí)例化變量$game,那么再把它加入Assessor類好了。

class Assessor {
protected $game;
public function setGame($game) { $this->game = $game; }
protected $prop_info = array(/* ... */);
}

也許你會偏向于選擇使用數(shù)據(jù)庫記錄數(shù)據(jù),不會用數(shù)組, 因?yàn)橛幸淮蠖训膮?shù)不可避免地要被羅列。如果是這樣的話,可以考慮使用" 引入叁數(shù)對象 " 進(jìn)行重構(gòu)。

注:重構(gòu)-引入叁數(shù)對象
方法中如果有很多參數(shù),常常變得很復(fù)雜,而且容易導(dǎo)致錯誤。你可以引入一個封裝參數(shù)的對象來替代一大堆的參數(shù)。舉例來說,“start date” and “end date” 叁數(shù)可以用一個 DateRange 對象一起代替。

在Monopoly這個例子中,這個參數(shù)對象應(yīng)該是什么呢?PropertyInfo,怎樣?它的目的是使每個道具參數(shù)數(shù)組引入 PropertyInfo 類的構(gòu)造器中,然后返回一個新對象。目的就意味著設(shè)計, 依照 TDD, 那意味著一個測試情形。

出處:
責(zé)任編輯:bluehearts

上一頁 php設(shè)計模式介紹之工廠模式 [5] 下一頁 php設(shè)計模式介紹之工廠模式 [7]

◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
php設(shè)計模式介紹之單件模式
flash+php+mysql簡單留言本教程
談?wù)勑率秩绾螌W(xué)習(xí)PHP
[php] 數(shù)據(jù)庫操作——分頁類
[php]mysql數(shù)據(jù)庫操作——DB類
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗(yàn)設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:6/81個記錄/頁 轉(zhuǎn)到 頁 共8個記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2