最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

如何使用javascript和php中实现观察者模式代码详解

来源:动视网 责编:小采 时间:2020-11-27 20:15:17
文档

如何使用javascript和php中实现观察者模式代码详解

如何使用javascript和php中实现观察者模式代码详解:观察者模式是当某个对象状态发生变化时,依存于该状态的全部对象自动得到通知,被观察者和观察者们是一对多的关系。书中还举了一个非常易懂的例子:获取系统当前时间并输出到命令行中。如果要硬编码也很简单,定义一个方法,先获取时间,然后再处理展示。这样
推荐度:
导读如何使用javascript和php中实现观察者模式代码详解:观察者模式是当某个对象状态发生变化时,依存于该状态的全部对象自动得到通知,被观察者和观察者们是一对多的关系。书中还举了一个非常易懂的例子:获取系统当前时间并输出到命令行中。如果要硬编码也很简单,定义一个方法,先获取时间,然后再处理展示。这样


观察者模式是当某个对象状态发生变化时,依存于该状态的全部对象自动得到通知,被观察者和观察者们是一对多的关系。书中还举了一个非常易懂的例子:获取系统当前时间并输出到命令行中。如果要硬编码也很简单,定义一个方法,先获取时间,然后再处理展示。这样获取时间的功能基本就不能复用了,因为带了个处理展示的拖油瓶。

如果用观察者模式则可以这样:定义两个类,一个用于计时,获取当前时间;另一个用于展示时间。展示时间的类就是观察者,这样做的好处是降低相互的依赖性。第一个类改变后不需要处理任何事物,只需要发出通知告诉它的观察者们,具体事物由它们处理。比如有一天我们想换种形式展示时间,或者用多种方式展示时间,完全不需要牵扯到第一个类。

php实现

//被观察者
class Subject
{
 private $_observers;
 public function __construct() {
 $this->_observers = array();
 }
 public function add_observer($obs) {
 $this->_observers[] = $obs;
 }
 public funtion delete_observer($bos) {
 $index = array_search($bos, $this->_observers);
 unset($this->_observers[$index]);
 }
 public function notify_observers() {
 foreach($this->_observers as $v) {
 $v->update();
 }
 }
}
//观察者
class Observer
{
 public function __construct() {
 do sth;
 }
 public function update() {
 do sth;
 }
}
//实例
$sub = new Subject();
$obs = new Observer();
$sub->add_observer($obs);
$sub->notify_observers();

js实现

js实现起来也不麻烦,就是得写些工具函数方便用,比如删除数组指定的元素。下面只用最简单的实现方法。

//被观察者
function Subject() {
 var _this = this;
 this.observers = [];
 this.addObserver = function(obj) {
 _this.observers.push(obj);
 }
 this.deleteObserver = function(obj) {
 var length = _this.observers.length;
 for(var i = 0; i < length; i++) {
 if(_this.observers[i] === obj) {
 _this.observers.splice(i, 1);
 }
 }
 }
 this.notifyObservers = function() {
 var length = _this.observers.length;
 console.log(length)
 for(var i = 0; i < length; i++) {
 _this.observers[i].update();
 }
 }
}
//观察者
function Observer() {
 this.update = function() {
 alert(1)
 }
}
var sub = new Subject();
var obs = new Observer();
sub.addObserver(obs);
sub.notifyObservers();
var sub = new Subject();

文档

如何使用javascript和php中实现观察者模式代码详解

如何使用javascript和php中实现观察者模式代码详解:观察者模式是当某个对象状态发生变化时,依存于该状态的全部对象自动得到通知,被观察者和观察者们是一对多的关系。书中还举了一个非常易懂的例子:获取系统当前时间并输出到命令行中。如果要硬编码也很简单,定义一个方法,先获取时间,然后再处理展示。这样
推荐度:
标签: 模式 使用 php
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top