三个类概括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 相关文章推荐
一个用php3编写的简单计数器
Oct 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
zend framework多模块多布局配置
Feb 26 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
php构造函数实例讲解
Nov 13 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
php递归删除目录与文件的方法
Jan 30 PHP
php文件下载处理方法分析
Apr 22 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 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中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php二维数组排序详解
2013/11/06 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python简单获取数组元素个数的方法
2015/07/13 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
简单谈谈python基本数据类型
2018/09/26 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
教学大赛获奖感言
2014/01/15 职场文书
个人求职自荐信范文
2014/06/20 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android