观察者模式

刺骨的言语ヽ痛彻心扉 2022-07-21 00:24 105阅读 0赞

js观察者模式

  1. <!DOCTYPE>
  2. <html>
  3. <head>
  4. <title> New Document </title>
  5. <meta name="Generator" content="EditPlus">
  6. <meta name="Author" content="">
  7. <meta name="Keywords" content="">
  8. <meta name="Description" content="">
  9. <meta content="text/html" charset="utf-8">
  10. </head>
  11. <style>
  12. div{
  13. margin:10px;
  14. width:500px;
  15. height:200px;
  16. border:1px solid red;
  17. }
  18. #ad{
  19. border: 1px solid blue;
  20. }
  21. </style>
  22. <script>
  23. window.onload = function(){
  24. var sel = document.getElementById('subject');
  25. sel.observers = {};
  26. var content = document.getElementById('content');
  27. var ad = document.getElementById('ad');
  28. var study = document.getElementById('study');
  29. //添加观察者
  30. sel.attach = function(key,obj){
  31. this.observers[key] = obj;
  32. }
  33. //删除观察者
  34. sel.detach = function(key){
  35. delete this.observers[key];
  36. }
  37. //通知观察者
  38. sel.onchange = sel.notice = function(){
  39. for(var key in this.observers){
  40. this.observers[key].update(this);
  41. }
  42. }
  43. //观察者更新规则
  44. content.update = function(subject){
  45. if(subject.value == 'male')
  46. this.style.background = 'blue';
  47. else if(subject.value == 'female')
  48. this.style.background = 'pink';
  49. }
  50. ad.update = function(subject){
  51. if(subject.value == 'male')
  52. this.innerHTML = '汽车';
  53. else if(subject.value == 'female')
  54. this.innerHTML = '美容';
  55. }
  56. study.update = function(subject){
  57. if(subject.value == 'male')
  58. this.innerHTML = '如何年薪百万,迎娶白富美';
  59. else if(subject.value == 'female')
  60. this.innerHTML = '如何做美丽女强人';
  61. }
  62. //添加观察者
  63. sel.attach('content',content);
  64. sel.attach('ad',ad);
  65. sel.attach('study',study);
  66. }
  67. </script>
  68. <body>
  69. <h1>观察者模式切换</h1>
  70. <select name="" id="subject">
  71. <option value="male">男式风格</option>
  72. <option value="female">女士风格</option>
  73. </select>
  74. <div id="content">我是内容</div>
  75. <div id="ad">我是广告</div>
  76. <div id="study">学习</div>
  77. </body>
  78. </html>

php观察者模式

  1. <?php
  2. //被观察对象类
  3. class user implements SplSubject{
  4. public $lognum;
  5. public $hobby;
  6. public function __construct($hobby){
  7. $this->lognum = rand(1,10);
  8. $this->hobby = $hobby;
  9. $this->observers = new SplObjectStorage(); //spl标准库对象,存储观察者的存储对象
  10. }
  11. public function login(){
  12. $this->notify();
  13. }
  14. public function attach(SplObserver $observer){
  15. $this->observers->attach($observer);
  16. }
  17. public function detach(SplObserver $observer){
  18. $this->observers->detach($observer);
  19. }
  20. public function notify(){
  21. $this->observers->rewind(); //将指针指向对象头部
  22. while($this->observers->valid()){
  23. $observer = $this->observers->current(); //弹出一个观察者对象
  24. $observer->update($this);
  25. $this->observers->next();
  26. }
  27. }
  28. }
  29. //观察者类
  30. class secrity implements SplObserver{
  31. public function update(SplSubject $subject){
  32. if($subject->lognum <3)
  33. echo '这是你第'.$subject->lognum.'次登录';
  34. else
  35. echo '这是你第'.$subject->lognum.'次登录,登录异常';
  36. }
  37. }
  38. class ad implements SplObserver{
  39. public function update(SplSubject $subject){
  40. if($subject->hobby == 'sport')
  41. echo "\n".'直播欧冠决赛';
  42. else
  43. echo "\n".'买买买';
  44. }
  45. }
  46. //进行观察
  47. $user = new user('sport');
  48. $user->attach(new secrity());
  49. $user->attach(new ad());
  50. $user->login();

发表评论

表情:
评论列表 (有 0 条评论,105人围观)

还没有评论,来说两句吧...

相关阅读

    相关 观察模式

    package 观察者模式; / 观察者模式, 理解就是一个状态的改变, 监视他的人就会给出不同的反应和业务

    相关 观察模式

    观察者模式 Observer   观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。   这个主题对象在状态上发生变化时,会通知所有观察者对

    相关 观察模式

    什么是观察者模式 有人这么说 > 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 > > 这个主题对象在状态上发生变化时,会通知所有观

    相关 观察模式

    场景描述:  一个气象站应用,可以实时获取温度、湿度和气压信息,气象站提供一个封装好的类WeatherData,该类有最新的气象信息,当这些信息发生变动的时候,类中的meas

    相关 观察模式

    观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 观察者模式图: ![输入图片说明][13105107_Mf

    相关 观察模式

    什么是观察者模式? 简单的来说,观察者模式=出版者+订阅者。用比较书面的话来说的话是:定义了对象之间的一对多依赖,当一所对应的对象状态改变时,它的所有依赖者都会收到通知并

    相关 观察模式

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

    相关 观察模式

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