三个类概括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 Ajax实现页面无刷新发表评论
Jan 02 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
PHP include_path设置技巧分享
Jul 03 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
php base64 编码与解码实例代码
Mar 21 PHP
Yii2选项卡的简单使用
May 26 PHP
浅谈PHP无限极分类原理
Mar 14 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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
jupyter notebook实现显示行号
2020/04/13 Python
如何用Python徒手写线性回归
2021/01/25 Python
美国家居装饰店:Pier 1
2019/09/04 全球购物
什么是serialVersionUID
2016/03/04 面试题
护士毕业生自荐信
2014/02/07 职场文书
《识字五》教学反思
2014/03/01 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
人事任命书范本
2015/09/21 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书