PHP设计模式系列 - 观察者模式
- 观察者模式
观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。
- 场景设计
- 设计一个订单类
- 订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
- 原始的方法,是将这些操作都写在create函数里面
- 但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
- 这个时候,观察者模式出现了。
- 代码设计:
<?php
//观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。
//观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码耦合。
//以一个购物流程为例子
class order { protected $observers = array(); // 存放观察容器 //观察者新增
public function addObServer($type, $observer) {
$this->observers[$type][] = $observer;
} //运行观察者
public function obServer($type) {
if (isset($this->observers[$type])) {
foreach ($this->observers[$type] as $obser) {
$a = new $obser;
$a->update($this); //公用方法
}
}
} //下单购买流程
public function create() {
echo '购买成功';
$this->obServer('buy'); // buy动作
}
}
class orderEmail {
public static function update($order) {
echo '发送购买成功一个邮件';
}
}
class orderStatus {
public static function update($order) {
echo '改变订单状态';
}
}
$ob = new order;
$ob->addObServer('buy', 'orderEmail');
$ob->addObServer('buy', 'orderStatus');
$ob->create();
转自:http://blog.csdn.net/initphp/article/details/7708006
PHP设计模式系列 - 观察者模式的更多相关文章
- Android设计模式系列--观察者模式
观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下.本文以AbstractCursor为例子,展开分析.观察者模式,Observer Patter ...
- PHP设计模式系列 - 观察者模式处理订单(异步操作附加功能)
观察者模式 观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性.观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码 ...
- javaScript 设计模式系列之一:观察者模式
介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),一个目标对象管理所有相依于它的观察者对象.该模式中存在两个角色:观察者和被观察者.目标对象与观察者之间的抽象耦合关系能够单独扩展 ...
- Java 设计模式系列(十五)观察者模式(Observer)
Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...
- .NET设计模式系列文章 from TerryLee
http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记来 ...
- .net设计模式之观察者模式
摘要 在今天的设计模式系列中我给大家带来了观察者模式,首先我会以一个生动的故事引入观察者模式的应用的场景,然后描述这个场景中出现的问题,最后我们提出观察者模式的解决方案,并给出C#语言实现的代 ...
- Android设计模式系列
http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...
- .NET设计模式系列文章
原文地址:http://terrylee.cnblogs.com/archive/2006/06/01/334911.html 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记 ...
- javascript设计模式系列
javascript设计模式系列 创建型: 1.抽象工厂模式(Abstract Factory) 2.构建者模式(Builder) 3.工厂方法模式(Factory Method) 4.原型模式( ...
随机推荐
- C语言实现将彩色BMP位图转化为二值图
CTF做了图片的隐写题,还没有形成系统的认识,先来总结一下BMP图的组成,并通过将彩色图转为二值图的例子加深下理解. 只写了位图二进制文件的格式和代码实现,至于诸如RGB色彩和调色板是什么的一些概念就 ...
- Git报错:error: cannot open .git/FETCH_HEAD: Read-only file system
Git:git pull时报错 error: cannot open .git/FETCH_HEAD: Read-only file system 查看该文件: 未在网上找到解决办法,重启服务器就好了 ...
- Xshell基础入门
启动 双击快捷方式,启动 新建回话 建立连接 在这里需要填写的是: 1. 连接名称 2. 服务器IP 3. 服务器端口(默认22) 填写完毕后,点击确定,保存配置,回到连接页面,可以看到多了一个测试服 ...
- datalist控件及list属性
html5新增了一个datalist元素,可以实现数据列表的下拉效果,气外观类似autocomplete,用户可从列表中选择,也可自行输入,而list用户指定输入框绑定哪一个datalist元素,其值 ...
- 面向对象(基础oop)之垃圾回收与静态成员
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- when coding in a fresh system
I have designed a component of a web system with my workmate. In detail, I am just a coder instead o ...
- 连接数据库 JDBC、DBCP、JNDI
一.JDBC package com.direct.util; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- 【PyQt5 学习记录】010:QSplitter
import sys from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTextEdit, QPushButton, QL ...
- 当碰到需要调试打包后的js
在react中经常开发碰到不能热更中进行调试的,如IE之类的 这个时候我们就需要打包才能运行看到效果, 但是往往每次打包都需要很长的时间: 这个时候我们就可以直接找到打包后的文件,直接在改文件中修改: ...
- 了解JS
什么是js? JS,是JavaScript的缩写形式,JavaScript是一种基于对象和事件驱动并且具有相对 安全性的客户端脚本语言. 借用java之名,但和java没有关系 javascript历 ...