三个类概括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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
php MYSQL 数据备份类
Jun 19 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
PHP页面中文乱码分析
Oct 29 PHP
php使用百度翻译api示例分享
Jan 31 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
php解决约瑟夫环算法实例分析
Sep 30 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
js打造数组转json函数
2015/01/14 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
求职者怎样写自荐信
2014/04/13 职场文书
应届毕业生求职信
2014/05/26 职场文书
五一活动标语
2014/06/30 职场文书
美术教师个人工作总结
2015/02/06 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
课改心得体会范文
2016/01/25 职场文书
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
PyTorch中permute的使用方法
2022/04/26 Python