三个类概括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 相关文章推荐
PHP6 mysql连接方式说明
Feb 09 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
php如何调用webservice应用介绍
Nov 24 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
9个比较实用的php代码片段
Mar 15 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
PHP与Perl之间知识点区别整理
Mar 19 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
php 图片上传类代码
2009/07/17 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
简单实现PHP留言板功能
2016/12/21 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
javascript中clipboardData对象用法详解
2015/05/13 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
思想品德课教学反思
2014/02/10 职场文书
设计专业自荐信
2014/06/19 职场文书
博士论文答辩开场白
2015/06/01 职场文书
叶问观后感
2015/06/15 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
python单向链表实例详解
2022/05/25 Python