三个类概括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开发GUI
Oct 09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
php读取xml实例代码
Jan 28 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php不用正则验证真假身份证
Nov 06 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 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中的正规表达式(二)
2006/10/09 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
Python迭代用法实例教程
2014/09/08 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
深入解析Python中的urllib2模块
2015/11/13 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
公司新年寄语
2014/04/04 职场文书
明星员工获奖感言
2014/08/14 职场文书
合作协议书格式
2014/08/19 职场文书
工会工作个人总结
2015/03/03 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
python析构函数用法及注意事项
2021/06/22 Python
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
Android中View.post和Handler.post的关系
2022/06/05 Java/Android