PHP設計パターンにおけるオブザーバーパターンの適用の詳細説明_PHPチュートリアル
Jul 21, 2016 pm 03:10 PM
オブザーバー パターン: オブジェクト間の 1 対多の依存関係を定義します。オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます。
Observer クラス:
1. 抽象トピック ロール: トピック ロールは、オブザーバー オブジェクトへのすべての参照をコレクションに保存し、各トピックは必要な数のオブザーバーを持つことができます。抽象テーマは、オブザーバー オブジェクトを追加および削除するためのインターフェイスを提供します。
2. 抽象オブザーバーの役割: すべての特定のオブザーバーのインターフェイスを定義し、観察の主体が変化したときに自身を更新します。
3. 特定のトピックの役割: 特定の主体の内部状態が発生したときに、関連する状態を特定のオブザーバー オブジェクトに保存します。 、登録されているすべてのオブザーバーに通知が送信されます。具体的なテーマの役割は、通常、具体的なサブクラスを使用して実装されます。
4. 特定のオブザーバーの役割: 特定のサブジェクト オブジェクトを保存し、関連する状態を保存し、独自の状態をサブジェクトの状態と一致させるために必要な更新インターフェイスを実装します。 . オブザーバーモードのカップリングは小さいです
2. ブロードキャスト通信をサポートします
コードをコピーします
コードは次のとおりです:
<?php
// 抽象主题
interface Subject{
public functionattach($observer);
public function detach($observer);
public function NoticeObservers();
}
// 特定の主题
class ConcreateSubject Subject{
private $_observers;
public function __construct(){
$this->_observers = array();
}
public functionattach($observer){
return array_push($this->_観察者、 $observer);
}
public function detach($observer){
$index = array_search($observer,$this->_observers);
if($index === false || !array_key_exists($index, $this->_observers)){
return false;
}
unset($this->_observer[$index]);
return true;
}
public function Noticeオブザーバー(){
if(!is_array( $this->_observers)){
return false;
}
foreach($this->_observers as $observer){
$observer->update();
}
trueを返す;
}
}
//抽象観察者
interface Observer{
public function update();
}
// 具体的な観察者
class ConcreteObserverimplement Observer{
private $_name;
public function __construct($name){
$this-> ;_name = $name;
}
public function update(){
echo 'Observer',$this->_name.' が通知しました<br/>';
}
}
//客户端
class Client{
public static function main(){
$subject = new ConcreteSubject();
//新增第一观観察者
$observer1 = new ConcreteObserver('Martin');
$subject->attach( $observer1);
// 通知
$subject->notifyObservers();
// 新增第二観察者
$observer2 = new ConcreteObserver('jaky' );
$subject->attach($ observer2);
// 通知
$subject->notifyObservers();
//删除観察者1
$subject->deatch($observer1);
// 通知
$subject->notifyObservers() ;
}
}
Client::main();
?>

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
