>백엔드 개발 >PHP 튜토리얼 >PHP 관찰자 패턴 관찰자 패턴의 단점 관찰자 패턴 코드 관찰자 패턴 클래스

PHP 관찰자 패턴 관찰자 패턴의 단점 관찰자 패턴 코드 관찰자 패턴 클래스

WBOY
WBOY원래의
2016-07-29 08:52:561128검색

관찰자 패턴에 대해 제가 이해한 것은 이벤트를 트리거할 때 우리가 알리고 싶은 개체에게 이 작업을 알리고 모든 개체가 바인딩하는 이 작업을 수행하도록 하려는 것입니다. 이 이벤트로 설정하세요.

1. 기본 클래스 정의(관찰자 추가, 알리고 싶은 객체, 관찰자에게 알리는 데 사용)

EventGenerator.php

<code><span><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>
{</span><span>//存储观察者,因为可以有多个要通知的对象,所以是一个数组</span><span>private</span><span>$observers</span> = <span>array</span>();
    <span>//添加观察者,也就是我想要通知的对象</span><span>public</span><span><span>function</span><span>addObserver</span><span>(<span>$observer</span>)</span>
    {</span><span>$this</span>->observers[] = <span>$observer</span>;
    }
    <span>//通知观察者</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>//取出所有的对象去执行操作</span><span>foreach</span>(<span>$this</span>->observers <span>as</span><span>$observer</span>)
        {
            <span>//这里我写一个update方法,这里就要求我所有的通知对象必须要有update操作,所以一会我会定义一个借口,让所有的观察者强制实现这个方法</span><span>$observer</span>->update();
        }
    }
}


<span>?></span></span></span></code>

인터페이스 파일을 정의하고 모든 관찰자가 업데이트 방법 Observer.php를 구현하도록 합니다.

<code><span><span><?php</span><span><span>interface</span><span>Observer</span>
{</span><span><span>function</span><span>update</span><span>()</span>;</span>
}

<span>?></span></span></code>

파일 정의 관찰자 패턴을 구현하는 이벤트 .php

<code><span><?php</span>
header(<span>'Content-Type:text/html;charset=utf-8'</span>);
define(<span>'BASEDIR'</span>, __DIR___);
<span>require</span><span>'Config.php'</span>;
spl_autoload_register(<span>'Config::autoload'</span>);

<span>//定义事件类继承基类</span><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>
{</span><span>//当触发这个事件的时候通知所有的观察者</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'我要开始更新了啊!<br/>\n'</span>;
        <span>//基类的通知方法</span><span>$this</span>->notify();
    }
}
<span>//添加观察者1</span><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>
{</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'我是观察者1,我收到你的通知了!我要干我该干的了!<br/>\n'</span>;
    }
}
<span>//添加观察者2</span><span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>
{</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'我是观察者2,我收到你的通知了!我要干我该干的了!<br/>\n'</span>;
    }
}
<span>//下面就要开始测试了!</span><span>$event</span> = <span>new</span> Event();
<span>//添加观察者到这个事件里</span><span>$event</span>->addObserver(<span>new</span> Observer1);
<span>$event</span>->addObserver(<span>new</span> Observer2);
<span>//执行trigger操作</span><span>$event</span>->trigger();
<span>//这时候就会显示!</span><span>//我要开始更新了啊!</span><span>//我是观察者1,我收到你的通知了!我要干我该干的了!</span><span>//我是观察者2,我收到你的通知了!我要干我该干的了!</span><span>?></span></code>
').addClass('사전 번호 매기기').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위 내용은 관찰자 모드와 PHP 내용을 포함한 PHP 관찰자 모드를 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.