• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 网站开发 >> PHP教程 >> 文章内容
 

精彩推荐

 
 

本类推荐文章

  • PHP的十个高级技巧
  • PHP找回密码机制流程
  • 解决phpmyadmin 乱码,支持gb..
 
 

本类阅读排行

  • PHP的十个高级技巧
  • PHP找回密码机制流程
  • Windows XP下PHP+MySQL环境搭..
  • PHP链接ACCESS数据库简单的方..
  • 解决phpmyadmin 乱码,支持gb..
  • PHP代码加密解密一法
  • 如何基于discuz开发网站通行..
  • PHP中格式化显示时间
  • 一个简单计数器的源代码
  • 简体中文转换为繁体中文的PH..
  • php命令行脚本多进程并发执行..
  • PHP/MySQL教程 完整教程
  • 一生成柱状图、横柱图、折线..
  • PHP 字符串操作入门教程
  • PHP入门速成
  • 做个自己站内搜索引擎
  • PHP代码:得到客户端的IP
  • 用PHP制作动态计数器
  • 实现统计在线人数/用户列表
  • AJAX在PHP中的简单使用
 
 

php教程:php设计模式介绍之值对象模式

  • 日期:2008-04-11     人气:     出处:phpchina     作者: forest
  • 字体大小:
  • 小
  • 中
  • 大

另一个重要的概念是对象Monopoly中的租金支付。让我们首先写一个测试实例(测试引导开发)。下面的代码希望用来实现既定的目标。

Webjx.Com

function TestRent() {
$game = new Monopoly;
$player1 = new Player(‘Madeline’);
$player2 = new Player(‘Caleb’);
$this->assertEqual(1500, $player1->getBalance());
$this->assertEqual(1500, $player2->getBalance());
$game->payRent($player1, $player2, new Dollar(26));
$this->assertEqual(1474, $player1->getBalance());
$this->assertEqual(1526, $player2->getBalance());
}

根据这个测试代码,我们需要在Monopoly对象中增加payRent()的方法函数来实现一个Player对象去支付租金给另一个Player对象.

Webjx.Com

Class Monopoly {
// ...
/**
* pay rent from one player to another
* @param Player $from the player paying rent
* @param Player $to the player collecting rent
* @param Dollar $rent the amount of the rent
* @return void
*/
public function payRent($from, $to, $rent) {
$to->collect($from->pay($rent));
}
}

payRent()方法函数实现了两个player对象之间($from和$to)的租金支付。方法函数Player::collect()已经被定义了,但是Player::pay()必须被添加进去,以便实例$from通过pay()方法支付一定的Dollar数额$to对象中。首先我们定义Player::pay()为:

网页教学网

class Player {
// ...
public function pay($amount) {
$this->savings = $this->savings->add(-1 * $amount);
}
}

Webjx.Com

但是,我们发现在PHP中你不能用一个数字乘以一个对象(不像其他语言,PHP不允许重载操作符,以便构造函数进行运算)。所以,我们通过添加一个debit()方法函数实现Dollar对象的减的操作。

class Dollar {
protected $amount;
public function __construct($amount=0) {
$this->amount = (float)$amount;
}
public function getAmount() {
return $this->amount;
}
public function add($dollar) {
return new Dollar($this->amount + $dollar->getAmount());
}
public function debit($dollar) {
return new Dollar($this->amount - $dollar->getAmount());
}
}

Webjx.Com

引入Dollar::debit()后,Player::pay()函数的操作依然是很简单的。

class Player {
// ...
/**
* make a payment
* @param Dollar $amount the amount to pay
* @return Dollar the amount payed
*/
public function pay($amount) {
$this->savings = $this->savings->debit($amount);
return $amount;
}
}

Player::pay()方法返回支付金额的$amount对象,所以Monopoly::payRent()中的语句$to->collect($from->pay($rent))的用法是没有问题的。这样做的话,如果将来你添加新的“商业逻辑”用来限制一个player不能支付比他现有的余额还多得金额。(在这种情况下,将返回与player的账户余额相同的数值。同时,也可以调用一个“破产异常处理”来计算不足的金额,并进行相关处理。对象$to仍然从对象$from中取得$from能够给予的金额。)

网页教学网

注:术语------商业逻辑

网页教学网

在一个游戏平台的例子上提及的“商业逻辑”似乎无法理解。这里的商业的意思并不是指正常公司的商业运作,而是指因为特殊应用领域需要的概念。请把它认知为 “一个直接的任务或目标”,而不是“这里面存在的商业操作”。

所以,既然目前我们讨论的是一个Monopoly,那么这里的 “商业逻辑”蕴含的意思就是针对一个游戏的规则而说的。

Webjx.Com

[1] [2] [3] [4]
相关文章
  • php教程:经典PHP代码
  • php教程:mysql的常用语句
  • PHP教程:cookie和数组的结合实现购物车
  • php教程:mysql数据库操作的DB类
  • php教程:php设计模式之编程惯用法
  • php教程:php设计模式之前言
  • PHP新手上路(一)
  • 来自PHP.NET的入门教程
  • PHP新手上路(二)
  • PHP新手上路(四)
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号