php核心学习-设计模式的学习-责任链模式
来源:互联网 发布:mysql复杂查询实例 编辑:程序博客网 时间:2024/06/03 20:13
一、什么是责任链模式
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
责任链模式的特点点主要是:
1、有多个对象共同对一个任务进行处理。
2、这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。
3、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上结束任务的处理,并结束任务。
3、客户端负责组装链式结构,但是客户端不需要关心最终是谁来处理了任务。
这些解释都是java方面的解释,不同语言,其实设计模式还是有点区别的,现在我们使用的是php实现责任链设计模式,我们使用一个场景来带入我们的设计模式学习当中,使用责任链模拟多步用户注册过程。
二、模式代码
用户注册处理器借口
abstract class UserReg{ public $step="step1";//当前状态,这个很重要 public $next=false;//下一节点 public $last=false;//上一节点 public function setNextStep($object) { $this->next=$object; $object->last=$this; } public function stepNext($user){ //只有当user的state和自己的mystate 相等时才会处理 if($user->step==$this->step) //代表当前状态 是自己要处理的 状态 { //判断 自己的下一个节点是否存在,如果存在则把控制权交给下一个节点 if($this->next) { $user->step=$this->next->step;//交控制权 return $user; } } else { if($this->next) return $this->next->stepNext($user); } }}
用户注册第一步处理接口
class UserInfo extends UserReg{ public $step="step1"; public function stepNext($user) { //假设这步 需要把用户初始信息保存到数据库。这里我们保存到session if($user==null) { $user=new UserEntity(); $user->user_name=$_POST["user_name"]; $user->user_pass=$_POST["user_pass"]; //模拟用户入库 $_SESSION["user"]=json_encode($user); } $get_user=parent::stepNext($user); // TODO: Change the autogenerated stub if($get_user) { //模拟保存用户 $_SESSION["user"]=json_encode($get_user); } }}
用户注册第二步处理接口
class UserPhone extends UserReg{ public $step="step2"; public function stepNext($user) { $user->user_phone=$_POST['user_phone']; $get_user=parent::stepNext($user); // TODO: Change the autogenerated stub if($get_user) { $_SESSION["user"]=json_encode($get_user); } }}
用户注册第三步接口
class UserSuccess extends UserReg{ public $step="step3"; public function stepNext($user) { //继续执行业务 $get_user=parent::stepNext($user); // TODO: Change the autogenerated stub if($get_user) $_SESSION["user"]=json_encode($get_user); }}
客户端调用
$userInfo=new UserInfo(); $userPhone=new UserPhone(); $userSuccess=new UserSuccess(); $userInfo->setNextStep($userPhone); $userPhone->setNextStep($userSuccess); $userInfo->stepNext(getUser());
当你执行到第二步退出的时候,重新注册,系统还是从之前退出的状态继续注册,简单的模拟差不多是这样子,仅提供设计模式思想。
阅读全文
1 0
- php核心学习-设计模式的学习-责任链模式
- php核心学习-设计模式的学习-简单工厂模式
- php核心学习-设计模式的学习-注册树模式
- php核心学习-设计模式的学习-观察者模式
- php核心学习-设计模式的学习-委托模式
- 设计模式实例学习-责任链模式
- 设计模式学习--责任链模式
- 设计模式学习笔记--责任链模式
- 学习设计模式-责任链模式
- 学习日记-责任链设计模式
- 责任链模式学习
- 责任链模式学习
- 我的设计模式学习之路4(责任链)
- 设计模式之责任链的学习思考
- HeadFirst 设计模式学习笔记15--责任链模式拾零
- HeadFirst 设计模式学习笔记9--责任链模式
- 设计模式学习笔记——责任链模式
- 设计模式学习笔记——责任链模式
- 线性回归的数学原理以及代码实现
- 美赛数模论文之公式写作
- 牛腩新闻发布系统总结
- Android各类有用的开源库项目
- 第K小数
- php核心学习-设计模式的学习-责任链模式
- Digital.Vision.Phoenix.v2015.3.020.Win64 1DVD
- Myeclipse错误:Errors occurred during the build. Errors running builder 'DeploymentBuilder' on project
- 【实验楼】基于BP神经网络的手写体识别——python3版
- Spring Boot
- 走迷宫
- 传统IT七大职业的云计算转型之路
- 哲学家吃饭问题(资源加锁和超时释放)
- leetcode(380). Insert Delete GetRandom O(1)