三个类概括PHP的五种设计模式


Posted in PHP onSeptember 05, 2012

工厂模式
单元素模式
观察者模式
命令链模式
策略模式

class people { 
private $name = ''; 
private $user = null; 
private function __constract($name){/*此处private定义辅助实现 单元素模式*/ 
$this->name = $name; 
} 
public static function instance($name){/*此方法实现 工厂模式*/ 
static $object = null;/*此变量实现 单元素模式*/ 
if (is_null($object)) 
$object = new people($name); 
return $object; 
} 
public function work_in($who=null) 
{ 
if (is_null($who)) echo 'error'; 
else { 
$this->user[] = $who;/*此数组变量实现 观察者模式*/ 
echo $who->work();/*此方法调用实现 策略模式*/ 
} 
} 
public function on_action($which=''){ 
if (empty($which)) echo 'error'; 
else { 
foreach ($this->user as $user) 
$user->action($which);/*此方法调用实现 命令链模式*/ 
} 
} 
} 
$people = people::instance('jack'); 
$people->work_in(new student); 
$people->work_in(new teacher); 
$people->on_action('eat'); 
class student { 
function work(){ 
echo '<br/>我是学生,朝九晚五。'; 
} 
function action($which){ 
if (method_exists($this, $which)) return $this->$which(); 
else echo 'you are wrong!'; 
} 
function eat(){ 
echo '<br/>我是学生,只能吃套餐。'; 
} 
} 
class teacher { 
function work(){ 
echo '<br/>我是老师,晚上备课最忙。'; 
} 
function action($which){ 
if (method_exists($this, $which)) return $this->$which(); 
else echo 'i can not do it!'; 
} 
function eat(){ 
echo '<br/>我是老师,可以每天吃大餐。'; 
} 
}
PHP 相关文章推荐
杏林同学录(四)
Oct 09 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
php debug 安装技巧
Apr 30 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
解析php中curl_multi的应用
Jul 17 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
php微信开发之谷歌测距
Jun 14 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
php将xml转化对象的实例详解
Nov 17 PHP
用来解析.htpasswd文件的PHP类
Sep 05 #PHP
用来解析.htgroup文件的PHP类
Sep 05 #PHP
PHP curl 并发最佳实践代码分享
Sep 05 #PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 #PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 #PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 #PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 #PHP
You might like
获取远程文件大小的php函数
2010/01/11 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
子页向父页传值示例
2013/11/27 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
javascript数据类型详解
2017/02/07 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python判断输入日期为第几天的实例
2018/11/13 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
给我一面国旗 python帮你实现
2019/09/30 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
校班主任推荐信范文
2013/12/03 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
高三语文复习计划
2015/01/19 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis