三个类概括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 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
PHP levenshtein()函数用法讲解
Mar 08 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
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python set集合类型操作总结
2014/11/07 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
python语言的优势是什么
2020/06/17 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
幼教求职信
2014/03/12 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
市场部岗位职责
2015/02/12 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
教师培训简讯
2015/07/20 职场文书
生日宴会祝酒词
2015/08/10 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers