【一天一个设计模式】05- 状态模式
时间:2008-11-11
来源:互联网
<?php
//积分基础类
class Point
{
//积分
public $point;
public function showPoint()
{
//列出用户的积分
}
public function showUseRecord()
{
//列出用户的积分使用记录
}
}
--------------------------------------------------------------------------
//积分低于500的类
class Point500 extends Point
{
//显示提示
public function showTips()
{
echo "客户发帖等行为可以增加积分";
}
//显示按钮
public function showButton()
{
echo "";
}
}
//积分大于500,低于1000的类
class Point600 extends Point
{
//显示提示
public function showTips()
{
echo "可以行使标准用户的权利";
}
//显示按钮
public function showButton()
{
echo "标准用户功能的按钮";
}
}
//积分大于1000的类
class Point1000 extends Point
{
//显示提示
public function showTips()
{
echo "可以行使高级用户的权利";
}
//显示按钮
public function showButton()
{
echo "高级用户的按钮";
}
}
--------------------------------------------------------------------------
//应用环境类,简单的理解为调用环境就可以了
class Context
{
//积分对象
public $pointObj;
//设置一个积分对象
public function setPointObj($point)
{
//低于500
if ($point<500) {
$this->pointObj = new Point500();
}
//大于1000
elseif ($point>1000) {
$this->pointObj = new Point1000();
}
//大于500,低于1000
else {
$this->pointObj = new Point600();
}
}
public function showPoint()
{
$this->pointObj->showPoint();
}
public function showUseRecord()
{
$this->pointObj->showUseRecord();
}
//显示提示
public function showTips()
{
$this->pointObj->showTips();
}
//显示按钮
public function showButton()
{
$this->pointObj->showButton();
}
}
--------------------------------------------------------------------------
$context = new Context();
$context->setPointObj(780);
//显示提示
$context->showTips();
?>
优点:更好的阅读,扩展,已经封装~~!
//积分基础类
class Point
{
//积分
public $point;
public function showPoint()
{
//列出用户的积分
}
public function showUseRecord()
{
//列出用户的积分使用记录
}
}
--------------------------------------------------------------------------
//积分低于500的类
class Point500 extends Point
{
//显示提示
public function showTips()
{
echo "客户发帖等行为可以增加积分";
}
//显示按钮
public function showButton()
{
echo "";
}
}
//积分大于500,低于1000的类
class Point600 extends Point
{
//显示提示
public function showTips()
{
echo "可以行使标准用户的权利";
}
//显示按钮
public function showButton()
{
echo "标准用户功能的按钮";
}
}
//积分大于1000的类
class Point1000 extends Point
{
//显示提示
public function showTips()
{
echo "可以行使高级用户的权利";
}
//显示按钮
public function showButton()
{
echo "高级用户的按钮";
}
}
--------------------------------------------------------------------------
//应用环境类,简单的理解为调用环境就可以了
class Context
{
//积分对象
public $pointObj;
//设置一个积分对象
public function setPointObj($point)
{
//低于500
if ($point<500) {
$this->pointObj = new Point500();
}
//大于1000
elseif ($point>1000) {
$this->pointObj = new Point1000();
}
//大于500,低于1000
else {
$this->pointObj = new Point600();
}
}
public function showPoint()
{
$this->pointObj->showPoint();
}
public function showUseRecord()
{
$this->pointObj->showUseRecord();
}
//显示提示
public function showTips()
{
$this->pointObj->showTips();
}
//显示按钮
public function showButton()
{
$this->pointObj->showButton();
}
}
--------------------------------------------------------------------------
$context = new Context();
$context->setPointObj(780);
//显示提示
$context->showTips();
?>
优点:更好的阅读,扩展,已经封装~~!
作者: kakashilw 发布时间: 2008-11-11
不错。。。实例很典型。。。。
作者: 0hudu 发布时间: 2008-11-17
这个模式为何与你之前发的“策略模式”这么像?

作者: phper222 发布时间: 2008-11-21
学习
作者: zhaofei299 发布时间: 2009-09-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28