ホームページ バックエンド開発 PHPチュートリアル PHP設計パターンにおけるオブザーバーパターンの適用の詳細説明_PHPチュートリアル

PHP設計パターンにおけるオブザーバーパターンの適用の詳細説明_PHPチュートリアル

Jul 21, 2016 pm 03:10 PM
php 頼る 関係 意味 物体 応用 モデル デザインパターン 詳しい説明

オブザーバー パターン: オブジェクト間の 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-&gt ;_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();
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327124.html技術記事オブザーバー パターン: オブジェクト間の 1 対多の依存関係を定義します。オブジェクトの状態が変化すると、そのオブジェクトに依存するすべてのオブジェクトが通知され、自動的に更新されます。 オブザーバークラス...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

See all articles