三个类概括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 相关文章推荐
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
php文件操作实例代码
May 10 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
深入PHP FTP类的详解
Jun 13 PHP
测试php函数的方法
Nov 13 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
Yii2框架中日志的使用方法分析
May 22 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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
用文本作数据处理
2006/10/09 PHP
PHP安全配置
2006/12/06 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php文件缓存类汇总
2014/11/21 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
filemanage功能中用到的common.js
2007/04/08 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
nodejs实现用户登录路由功能
2019/05/22 NodeJs
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Python中字典的基本知识初步介绍
2015/05/21 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python正则表达式经典入门教程
2017/05/22 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
支教自我鉴定
2014/01/18 职场文书
40岁生日感言
2014/02/15 职场文书
写给老婆的检讨书
2014/02/21 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
行政助理岗位职责
2015/02/10 职场文书
举起手来观后感
2015/06/09 职场文书