三个类概括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安全配置
Dec 06 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
PHP访问Google Search API的方法
Mar 05 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 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之sprintf函数用法详解
2014/11/12 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
Laravel下生成验证码的类
2017/11/15 PHP
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
js模拟微博发布消息
2017/02/23 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python使用列表的最佳方案
2020/08/12 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
美的官方商城:Midea
2016/09/14 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
怎样自定义一个异常类
2016/09/27 面试题
师德师风剖析材料
2014/09/30 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
违纪检讨书
2015/01/27 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
施工安全协议书
2016/03/22 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript