三个类概括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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
PHPMyAdmin 快速配置方法
May 11 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
php 可变函数使用小结
Jun 12 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
php实现微信发红包功能
2018/07/13 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
js中生成map对象的方法
2014/01/09 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python通过索引遍历列表的方法
2015/05/04 Python
python常用函数详解
2016/09/13 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python自动抢红包教程详解
2019/06/11 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
python新手学习使用库
2020/06/11 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
实习自荐信
2013/10/13 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
工作时间调整通知
2015/04/24 职场文书
Go语言grpc和protobuf
2022/04/13 Golang