具体应用场景是,当subject的某个动作需要引发一系列不同对象的动作(比如你是一个班长要去通知班里的某些人),与其一个一个的手动调用触发的方法(私下里一个一个通知),不如维护一个列表(建一个群),这个列表存有你想要调用的对象方法(想要通知的人);之后每次做的触发的时候只要轮询这个列表就好了(群发),而不用关心这个列表里有谁,只用关心想让谁加入让谁退出
PHP版:
<span style="color: #008000;">//</span><span style="color: #008000;">这个是主题</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Paper{ </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$_observers</span>=<span style="color: #0000ff;">array</span><span style="color: #000000;">(); </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> register(<span style="color: #800080;">$obj</span><span style="color: #000000;">){ </span><span style="color: #800080;">$this</span>->_observers[]=<span style="color: #800080;">$obj</span><span style="color: #000000;">; } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> start(){ </span><span style="color: #0000ff;">if</span>(!<span style="color: #0000ff;">empty</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">_observers)){ </span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$this</span>->_observers <span style="color: #0000ff;">as</span> <span style="color: #800080;">$observer</span><span style="color: #000000;">){ </span><span style="color: #800080;">$observer</span>-><span style="color: #000000;">todo(); } } } } </span><span style="color: #008000;">//</span><span style="color: #008000;">这个是观察者</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> observer{ </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> todo(){ </span><span style="color: #0000ff;">echo</span> "我在做..."<span style="color: #000000;">; } } </span><span style="color: #800080;">$paper</span>=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Paper(); </span><span style="color: #800080;">$paper</span>->register(<span style="color: #0000ff;">new</span><span style="color: #000000;"> observer()); </span><span style="color: #800080;">$paper</span>->register(<span style="color: #0000ff;">new</span><span style="color: #000000;"> observer()); </span><span style="color: #800080;">$paper</span>->start();
javascript版:
<span style="color: #008000;">//</span><span style="color: #008000;">这是主题</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> Paper(){ </span><span style="color: #0000ff;">this</span>.observers=<span style="color: #000000;">[]; </span><span style="color: #0000ff;">this</span>.register=<span style="color: #0000ff;">function</span><span style="color: #000000;">(obj){ </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.observers.push(obj); } </span><span style="color: #0000ff;">this</span>.start=<span style="color: #0000ff;">function</span><span style="color: #000000;">(){ </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">var</span> i=0;ithis.observers.length;i++<span style="color: #000000;">){ </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.observers[i].todo(); } } } </span><span style="color: #008000;">//</span><span style="color: #008000;">这是观察者</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> Observer(){ </span><span style="color: #0000ff;">this</span>.todo=<span style="color: #0000ff;">function</span><span style="color: #000000;">(){ console.log(</span>"我在做..."<span style="color: #000000;">); } } </span><span style="color: #0000ff;">var</span> paper=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Paper(); paper.register(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Observer()); paper.register(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Observer()); paper.start();</span>
java版:
<span style="color: #0000ff;">package</span><span style="color: #000000;"> com.tsh.mthread; </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.ArrayList; </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.List; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Home { </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) { Paper paper</span>=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Paper(); paper.register(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Observer()); paper.register(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Observer()); paper.start(); } </span><span style="color: #008000;">//</span><span style="color: #008000;">这是主题</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Paper{ </span><span style="color: #0000ff;">private</span> List<observer> observers=<span style="color: #0000ff;">new</span> ArrayList<observer><span style="color: #000000;">(); </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> register(Observer observer){ observers.add(observer); } </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> start(){ </span><span style="color: #0000ff;">if</span>(observers.size()!=0<span style="color: #000000;">){ </span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Observer observer:observers){ observer.todo(); } } } } </span><span style="color: #008000;">//</span><span style="color: #008000;">这是观察者</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Observer{ </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> todo(){ System.out.println(</span>"我在做..."<span style="color: #000000;">); } } }</span></observer></observer>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前ByDDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前ByDDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前ByDDD
节省R.E.P.O.解释(并保存文件)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影 - 如何找到铁匠,解锁武器和装甲定制
4 周前ByDDD

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。