三个类概括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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
php zend 相对路径问题
Jan 12 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP内存使用情况如何获取
Oct 10 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
php 实现进制相互转换
Apr 07 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
PHP 无限级分类
May 04 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
Mar 29 PHP
php png失真的原因及解决办法
Oct 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统计字符串中中英文字符的个数
2013/06/23 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
python内置模块collections知识点总结
2019/12/19 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
python的help函数如何使用
2020/06/11 Python
python中round函数如何使用
2020/06/19 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
有兼职工作经历的简历自我评价
2014/03/07 职场文书
毕业寄语大全
2014/04/09 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
优秀员工演讲稿
2019/06/21 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
Python爬虫基础初探selenium
2021/05/31 Python
Python中22个万用公式的小结
2021/07/21 Python
Python实现视频中添加音频工具详解
2021/12/06 Python