当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

<?php
class Subject{
private $observer_list;
private $num; public function __construct(){
$this->observer_list = new SplDoublyLinkedList();
} public function attach(Observer $observer){
$this->observer_list->push($observer);
} public function setNum($num){
$this->num = $num;
$this->notify();
} public function getNum(){
return $this->num;
} public function notify(){
foreach ($this->observer_list as $observer) {
$observer->update();
}
}
} abstract class Observer{
public $subj;
public function __construct(Subject $subj){
$this->subj = $subj;
$this->subj->attach($this);
} abstract function update();
} class BinObserver extends Observer{
public function update(){
echo "二进制更新:".decbin($this->subj->getNum())."\n";
}
} class OctObserver extends Observer{
public function update(){
echo "八进制更新:".decoct($this->subj->getNum())."\n";
}
} class HexObserver extends Observer{
public function update(){
echo "十六进制更新:".dechex($this->subj->getNum())."\n";
}
} $subject = new Subject();
new BinObserver($subject);
new OctObserver($subject);
new HexObserver($subject);
$subject->setNum(22);

运行结果:

二进制更新:10110
八进制更新:26
十六进制更新:16

【php设计模式】观察者模式的更多相关文章

  1. 18. 星际争霸之php设计模式--观察者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. linkin大话设计模式--观察者模式

    linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...

  3. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  4. js设计模式-观察者模式

    定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...

  5. 【设计模式】Java设计模式 - 观察者模式

    [设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

  6. [Head First设计模式]山西面馆中的设计模式——观察者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...

  7. javascript 设计模式-----观察者模式

    观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...

  8. c#设计模式-观察者模式

    Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...

  9. JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...

  10. IOS设计模式-观察者模式

    前言:23种软件设计模式中的观察者模式,也是在软件开发中,挺常用的一种设计模式.而在苹果开发中,苹果Cocoa框架已经给我们实现了这个设 计模式,那就是通知和KVO(Key-Value Observi ...

随机推荐

  1. linux安装python3 大型的软件一定要安装在/ opt中 规范

    关闭页面特效     linux中安装python   1.首先切换目录 大型的软件一定要安装在/ opt中  规范 cd /opt 2.下载python3的源码 wget https://www.p ...

  2. Swift 析构过程

    在一个类的实例被释放之前,析构函数被立即调用.用关键字deinit来标示析构函数,类似于初始化函数用init来标示.析构函数只适用于类类型. 析构过程原理 Swift 会自动释放不再需要的实例以释放资 ...

  3. kotlin之MutableMap委托

    fun main(arg: Array<String>) { val map = mutableMapOf("name" to "tom", ) v ...

  4. python3 super().__init__() 和 __init__() 的区别

    1.单继承 super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用. class Base(object): def __init_ ...

  5. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  6. GBDT详解例子

    https://blog.csdn.net/zpalyq110/article/details/79527653

  7. 第五章 局域网的ARP 欺骗

    @ARP欺骗 arp欺骗仅限于局域网. arp欺骗虽然仅限于局域网,但却能让我们掌握网络的布局,以及如何通信:所以,我觉得这个章节非常有用. 监控本机流量 kali linux默认是不转发ip,如果我 ...

  8. 【VS开发】#pragma预处理命令

    #pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") ...

  9. spring效验

    相关依赖 如果开发普通 Java 程序的的话,你需要可能需要像下面这样依赖: <dependency> <groupId>org.hibernate.validator< ...

  10. mysql的密码规则问题

    今天在设置mysql某用户的密码时,出现了此报错:   ERROR 1819 (HY000) Your password does not satisfy the current policy req ...