三个类概括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 验证码制作(网树注释思想)
Jul 20 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
PHP类的封装与继承详解
Sep 29 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
php curl批处理实现可控并发异步操作示例
May 09 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
详解React 元素渲染
2020/07/07 Javascript
浅析Python中的join()方法的使用
2015/05/19 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
pytorch 修改预训练model实例
2020/01/18 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
化学教师教学反思
2014/01/17 职场文书
留学自荐信写作方法
2014/01/27 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
大学军训的体会
2014/11/08 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
高中地理教学反思
2016/02/19 职场文书
go xorm框架的使用
2021/05/22 Golang
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang