Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Entwurfsmuster – Beobachtermuster

PHP-Entwurfsmuster – Beobachtermuster

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-08-08 09:25:341042Durchsuche

Beobachtermuster

Beobachtermuster (Beobachter): Wenn sich der Status eines Objekts ändert, werden alle Objekte, die darauf angewiesen sind, benachrichtigt und automatisch aktualisiert.

Rolle im Muster

  • Abstrakter Beobachter (abstrakte Klasse, einfach zu erweitern) speichert das Beobachterobjekt in einem Container. Diese Klasse bietet einige Schnittstellen, z. B. das Hinzufügen von Beobachtern und das Abbrechen Beobachter, benachrichtigen Sie den Beobachter (benachrichtigen)
  • Konkreter Beobachter (konkrete Klasse, erbt die abstrakte Klasse des Beobachters) Speichern Sie den Beobachter, der benachrichtigt werden muss, und rufen Sie die Benachrichtigungsmethode auf, wenn der Beobachter aktualisiert werden muss
  • Abstrakte Beobachter (Schnittstellen oder abstrakte Klassen) stellen aktualisierte Schnittstellen für konkrete Beobachter bereit und werden aktualisiert, wenn sie vom Beobachter benachrichtigt werden
  • Konkrete Beobachter (konkrete Klassen, erben oder implementieren Abstraktionen) Beobachter) Implementieren Sie die abstrakte Schnittstelle Beobachter, automatisch aktualisieren

phpDemo

Abstrakter Beobachter

<code><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>{</span><span>private</span><span>$observer_arr</span> = <span>array</span>();

    <span>/*
        添加观察者
     */</span><span>public</span><span><span>function</span><span>addObserver</span><span>( Observer <span>$observer</span>)</span>
    {</span><span>$this</span>->observer_arr[] = <span>$observer</span>;
    }

    <span>/*
        通知所有观察者
     */</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>foreach</span> (<span>$this</span>->observer_arr <span>as</span><span>$observer</span>) 
        {
            <span>$observer</span>->update();
        }
    }

}
</span></code>

Konkreter Beobachter

<code><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>{</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'event happen!<br/>'</span>;
        <span>//当事件发生时,通知所有观察者</span><span>$this</span>->notify();
    }

}
</code>

Abstrakter Beobachter

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

</code>

Konkreter Beobachter

<code><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer1 update<br/>'</span>;
    }
}

<span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer2 update<br/>'</span>;
    }
}

</code>

Testcode

<code><span>$obj</span> = <span>new</span> Event();
<span>//添加观察者</span><span>$obj</span>->addObserver(<span>new</span> Observer1());
<span>$obj</span>->addObserver(<span>new</span> Observer2());
<span>$obj</span>->trigger();
</code>

Musterzusammenfassung

  • Vorteile: Das Beobachtermuster implementiert eine geringe Kopplung, nicht intrusiv Benachrichtigungs- und automatischer Aktualisierungsmechanismus
  • Nachteile: Die Abhängigkeitsbeziehung wird nicht vollständig beseitigt, und der abstrakte Melder verlässt sich immer noch auf den abstrakten Beobachter
  • Testszenarien: 1. Wenn die Änderung eines Objekts eine Änderung erfordert andere Objekte, und es weiß nicht, wie viele Objekte geändert werden müssen. 2. Ein abstrakter Typ hat zwei Aspekte, und wenn ein Aspekt vom anderen Aspekt abhängt, kann das Beobachtermuster verwendet werden, um die beiden zu kapseln unabhängige Objekte, sodass sie unabhängig voneinander geändert und wiederverwendet werden können

Das Obige stellt das Beobachtermuster vor, eines der PHP-Entwurfsmuster, einschließlich seiner Aspekte. Ich hoffe, es wird Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn