《PHP设计模式介绍》第二章 值对象模式(3)_PHP教程
推荐:《PHP设计模式介绍》第一章 编程惯用法
学习一门新的语言意味着要采用新的惯用法。这章将介绍或者可能重新强调一些惯用法。你会发现这些惯用法在你要在代码中实现设计模式时候是非常有用的。
在这里总结的许多编程惯用法都是很值得
详细例子:
让我们在一下更加复杂的例子中查看值对象模式的功能。
让我们开始实现一个的基于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的功能比较简单。构造器创建一个Dollar类的实例$go_amount,设定为200,实例go_amount常常被passtGo()函数调用,它带着一个player参数,并让对象player的函数collect为player机上200美元.
Player类的声明请看下面代码,Monoplay类调用带一个Dollar参数的Player::collect()方法。然后把Dollar的数值加到Player的现金余额上。另外,通过判断Player::getBalance()方法函数返回来的余额,我们可以知道使访问当前Player和Monopoly对象实例是否在工作中。
class Player { |
上边已经给出了一个Monopoly和Player类,你现在可以根据目前声明的几个类定义进行一些测试了。
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这个测试代码,代码的运行是没有问题的。现在可以添加一些新的功能。
分享:《PHP设计模式介绍》导言
当你在不断的试图从你的应用程序中发现新的特征时,你是否发现你提出的解决方法和一些以前你已经实现的东西是如此的类似呢?如果你是一个程序员(即使你才 开始很短的时间),你都可能回答&ldqu
- 相关链接:
- 教程说明:
PHP教程-《PHP设计模式介绍》第二章 值对象模式(3)
。