三个类概括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.MVC的模板标签系统(三)
Sep 05 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
微信支付开发订单查询实例
Jul 12 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 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实现批量下载百度云盘文件例子分享
2014/04/10 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
汽车检测与维修专业求职信
2013/10/30 职场文书
股权收购意向书
2014/04/01 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
家庭贫困证明
2015/06/16 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
教你用python控制安卓手机
2021/05/13 Python
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python