ホームページ  >  記事  >  バックエンド開発  >  PHP デザイン パターン シリーズ - Mediator Pattern_PHP チュートリアル

PHP デザイン パターン シリーズ - Mediator Pattern_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:52:161072ブラウズ

中間モデル
Mediator パターンは、相互に直接通信することなく、同様のオブジェクトのコレクションへの変更を通信または仲介できるオブジェクトを開発するために使用されます。一般に、同期を維持する必要がある類似のプロパティを持つ非結合オブジェクトを扱う場合、最良のアプローチはメディエーター パターンです。 PHP ではあまり一般的に使用されないデザイン パターン。
デザインシーン:
CD クラスと MP3 クラスがあり、どちらのクラスも同様の構造をしています。
CD カテゴリを更新するときに、同時に MP3 カテゴリも更新する必要があります。
従来のアプローチは、CD クラスで MP3 クラスをインスタンス化してから更新することですが、これを行うと、新しい MP4 クラスが追加された場合にコードが処理されなくなります。
メディエーター パターンは、メディエーター クラスを介してこの状況を適切に処理します。メディエーター クラスが CD クラスで呼び出されている限り、データを同期的に更新できます。
phpwind フォーラムでは、このデザイン パターンが以前に使用されています。
コード:
[php]
クラス CD {
パブリック $band = ''; パブリック $title = ''; 保護された $_mediator

パブリック関数 __construct(MusicContainerMediator $mediator = NULL) {
$this->_mediator = $mediator; }

パブリック関数 save() {
//具体的な実装は未定 var_dump($this); }

パブリック関数changeBandName($bandname) {
If ( ! is_null($this->_mediator)) { $ this-> _mediator-> change($ this、array( "band" => $ bandname));                                                                                        $this->band = $bandname; $this->save();                                                                        }
//MP3Archive クラス
クラス MP3Archive { 保護された$_mediator;
パブリック関数 __construct(MusicContainerMediator $mediator = NULL) {
$this->_mediator = $mediator;                                                                                   
パブリック関数 save() { //具体的な実装は未定 var_dump($this);    }
     
    public function changeBandName($bandname) {
        if ( ! is_null($this->_mediator)) {
            $this->_mediator->change($this, array("band" => $bandname));                
        }
        $this->バンド = $バンド名;                
        $this->save();            
    }
     
}
 
 //中介者类
クラス MusicContainerMediator {
    protected $_containers = array();                       
     
    パブリック関数 __construct() {
        $this->_containers[] = "CD";                
        $this->_containers[] = "MP3Archive";            
    }
     
    public function change($originalObject, $newValue) {
        $title = $originalObject->title;                
        $band = $originalObject->band;                               
        foreach ($this->_containers as $container) {
            if ( ! ($originalObject instanceof $container)) {
                $object = 新しい $container;                        
                $object->title = $title;                        
                $object->band = $band;                                               
                foreach ($newValue as $key => $val) {
                    $object->$key = $val;                        
                }
                $object->save();                    
            }
        }
    }
}
 
//测试实例
$titleFromDB = "肋骨の無駄";        
$bandFromDB = "二度としない";        
$mediator = new MusicContainerMediator();        
$cd = 新しい CD($mediator);        
$cd->title = $titleFromDB;        
$cd->バンド = $bandFromDB;        
$cd->changeBandName("もう一度もう一度");   
作者:initphp

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478130.html技術記事中間メディア モード 中間メディア モードは、同様のオブジェクト間で直接相互に行われない場合に、これらのオブジェクトのセットの変更を送信または解釈できるオブジェクトを発行するために使用されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。