一看就懂系列之 php设计模式(二)
2016-03-30 23:14
525 查看
友情链接:一看就懂系列之 php设计模式(一)
我的理解
1.定义两个接口:观察者接口、被观察者接口(主题)
2.定义两部分类:
-被观察者(主题)的实现类,包括注册函数,取消注册函数,运行函数(也叫通知函数)
-观察者的类,每个类都继承被观察者接口,并且各自实现自己的复杂的逻辑过程。
3.使用前每个观察者的类需要先通过注册函数注册,最后统一由运行函数(也叫通知函数)统一执行
使用姿势
1.当系统中某段逻辑特别复杂特别长藕合度特别高的时候,可以尝试观察者模式,进行解耦,每个部分都拆开来定义类,最后再统一执行。可以减少到处实例化类的麻烦。
2.项目中使用场景多存在于复杂的业务模块,使用观察者模式防止日积月累后,文件冗长,导致后续维护困难。
伪代码实现
前言
今天看到一句话说的非常好:“设计模式更多想表达的是一种想法,而并非具体的代码实现”。设计模式
观察者模式
不得不承认网上很多写观察者模式的文章,但多数都是看过去觉得不是很好理解,确实观察者模式不是很好理解,我只是写写自己的理解。我的理解
1.定义两个接口:观察者接口、被观察者接口(主题)
2.定义两部分类:
-被观察者(主题)的实现类,包括注册函数,取消注册函数,运行函数(也叫通知函数)
-观察者的类,每个类都继承被观察者接口,并且各自实现自己的复杂的逻辑过程。
3.使用前每个观察者的类需要先通过注册函数注册,最后统一由运行函数(也叫通知函数)统一执行
使用姿势
1.当系统中某段逻辑特别复杂特别长藕合度特别高的时候,可以尝试观察者模式,进行解耦,每个部分都拆开来定义类,最后再统一执行。可以减少到处实例化类的麻烦。
2.项目中使用场景多存在于复杂的业务模块,使用观察者模式防止日积月累后,文件冗长,导致后续维护困难。
伪代码实现
<?php /** * 观察者模式 */ interface PaperObserver //观察者接口 { function register($sub); //注册函数 function trigger(); //执行函数(也叫通知函数) } class Paper implements PaperObserver{ /* 主题 */ private $_observers = array(); public function register($sub){ /* 注册观察者 */ $this->_observers[] = $sub; } public function trigger(){ /* 外部统一访问 */ if(!empty($this->_observers)){ foreach($this->_observers as $observer){ $observer->update(); } } } } /** * 观察者要实现的接口 */ interface Observerable{ public function update(); } class Subscriber implements Observerable{ public function update(){ echo "Callback\n"; } } /* 测试 */ $paper = new Paper(); $paper->register(new Subscriber()); //$paper->register(new Subscriber1()); //$paper->register(new Subscriber2()); $paper->trigger();
相关文章推荐
- 使用ThinkPHP上传类处理KindEditor上传的图片
- YII2.0的文件上传, 并把文件名称重新编译
- ViewPager with FragmentPagerAdapter
- ActionBar+TabPageIndicator+ViewPager+FragmentPagerAdapter的Tab主界面
- 调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法
- PHP 超文本预处理器
- 调用FragmentPagerAdapter的notifyDataSetChanged()方法视图未更新
- mac PHP配置
- PHP中实现页面刷新或跳转的方法
- PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方法
- phpExcel实现表格之间的转换
- PHP字符串函数的简单应用
- PHP字符串 集合的相关函数
- ThinkPHP控制器操作绑定到类以及空控制器空操作
- (转)两千行PHP学习笔记
- php7 读取php.ini[4]
- php7 类的方法传参[3]
- php7 扩展类的写法[2]
- php中单引号与双引号的区别【新浪云搬运】
- phpExcel常用方法