PHP - 设计模式 - 观察者模式
<?php
//观察者模式
//抽象通知者
abstract class Subject {
protected $observer = array() ;
//添加观察者
public abstract function Attach(observer $observer);
//移除观察者
public abstract function Detach(observer $observer);
//通知观察者
punlic abstract function Notify();
}
//具体通知者
class ConcreteSubject extends Subject{
//通知者状态
public $subject_state;
//添加观察者
public function Attach(observer $observer){
array_push($this->subject_state ,$observer);
}
//移除观察者
public function Detach(observer $observer){
foreach ($this->observer as $key => $value) {
if ($val == $observer) {
unset($this->observer[$k])
}
}
}
//通知观察者
public function Notify(observer $observer){
foreach ($this->observer as $key => $value) {
$v->update();
}
}
}
//抽象观察者
abstract class Observer{
public abstract functioin update();
}
//具体观察者
class ConcreteObserver extends Observer{
private $name ;
private $subjectStats ;
//通知者
public $subject ;
public function __construct(ConcreteSubuject $_sub,$_name){
$this->subject = $_sub ;
$this->name = $_name ;
}
public function Update(){
$this->subjectStats = $this->subject->subject_state ;
echo "观察者".$this->name."的新状态是:".$this->subjectStats."<br/>"
}
}
$_s = new ConcreteSubject();
$a = new ConcreteObserver($_s,'a');
$b = new ConcreteObserver($_s,'b');
$c = new ConcreteObserver($_s,'c');
$_s->Attach($a);
$_s->Attach($b);
$_s->Attach($c);
$_s->subject_state = 'xxx';
$_s->Notify();
PHP - 设计模式 - 观察者模式的更多相关文章
- 18. 星际争霸之php设计模式--观察者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- linkin大话设计模式--观察者模式
linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- js设计模式-观察者模式
定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...
- 【设计模式】Java设计模式 - 观察者模式
[设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...
- javascript 设计模式-----观察者模式
观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...
- c#设计模式-观察者模式
Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...
- JAVA 设计模式 观察者模式
用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观 ...
- IOS设计模式-观察者模式
前言:23种软件设计模式中的观察者模式,也是在软件开发中,挺常用的一种设计模式.而在苹果开发中,苹果Cocoa框架已经给我们实现了这个设 计模式,那就是通知和KVO(Key-Value Observi ...
随机推荐
- Sqli-Labs less1-4
首先,记录一下基础知识,可能不全: 几个常用的函数: 1.version() --Mysql版本 2.user() --数据库用户名 3.database() --数据库名 4.@@datad ...
- IP笔记
自动专用IP地址APIPA的范围是B类地址块169.254.0.0--169.254.255.255
- 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下
背景及常见术语 背景 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库- ...
- 「TJOI2019」唱、跳、rap 和篮球 题解
题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...
- 【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理
问题描述 通过Docker Desktop for Linux,配置Nginx镜像后,自定义nginx.conf文件,修改启动目录和对 /out 路径的反向代理到博客园的博文地址 (https://w ...
- vim宏录制
宏录制 当你要重复某一个操作时,录制的宏可以很快地帮你完成任务. 准备文本 <!DOCTYPE html> <html lang="en"> <hea ...
- C# 插件编写
//加载插件 private void LoadPlugins() { string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExe ...
- springboot 2.0 整合 RestTemplate
首先导入springboot 的 web 包 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- 【ArcGIS】 设置管段的流向
在排水管网或者燃气管网中对管段进行几何网络分析,常常用到设置管段流向,一般有三种方法: 1,有流向字段的,直接进行唯一值渲染, 2,没有流向字段的需要建立几何网络, 2.1 在几何网络存在的情况下,设 ...
- protected访问权限
Java中protected方法访问权限的问题 protected 修饰的成员变量或方法,只能在同包或子类可访问; package 1 public class TestPackage { prote ...