中介者模式

<?php
/**
 * @author  v.r  And  
 * 
 * @example
 * 中介者模式
 * 中介者設計模式用於開發一個對象,這個對象可以在相似對象相互之間不直接
 * 交互的狀況下傳送或調解對這些對象的集合的修改
 * 案例同步數據 
 * 列如
 * 更改數據,須要同步
 * 
 * 同步保存數據到雲中
 * 同步保存數據到文本
 * 同步保存數據到DB
 * 
 * @copyright copyright information
 * 
 */
/*
class CD 
{
    public $band = '';
    public $title = '';

    public function save()
    {
        # code...
        var_dump($this);
    }

    public function changeBandName($newName)
    {
        # code...
        $this->band = $newName;
        $this->save();
    }

}*/

class CD
{
    public $band = '';
    public $title = '';
    protected $mediator;
    
    public function __construct($mediator = NULL)
    {
        # code...
        $this->mediator = $mediator;
    }

    public function save()
    {
        # code...
        //var_dump($this);
        print "\n write DB";
    }

    public function changeBandName($newName)
    {
        # code...
        if (!is_null($this->mediator)) {
            $this->mediator->change($this,array('band'=>$newName));
            # code...
        }
        $this->band = $newName;
        $this->save();
    }

}


class MP3Archive
{
    public $band = '';
    public $title = '';
    protected $mediator;
    
    public function __construct($mediator = NULL)
    {
        # code...
        $this->mediator = $mediator;
    }

    public function save()
    {
        # code...
       // var_dump($this);
        print "\n write text";
    }

    public function changeBandName($newName)
    {
        # code...
        if (!is_null($this->mediator)) {
            $this->mediator->change($this,array('band'=>$newName));
            # code...
        }
        $this->band = $newName;
        $this->save();
    }

}


class DataCloud
{
    public $band = '';
    public $title = '';
    protected $mediator;
    
    public function __construct($mediator = NULL)
    {
        # code...
        $this->mediator = $mediator;
    }

    public function save()
    {
        # code...
       // var_dump($this);
        print "\n write Cloud";
    }

    public function changeBandName($newName)
    {
        # code...
        if (!is_null($this->mediator)) {
            $this->mediator->change($this,array('band'=>$newName));
            # code...
        }
        $this->band = $newName;
        $this->save();
    }

}


// 音樂容器中介者模式
class MusicContainerMediator
{
    protected $containers = array();

    public function __construct()
    {
        # code...
        $this->containers[] = 'CD';
        $this->containers[] = 'MP3Archive';
        $this->containers[] = 'DataCloud';
    }

    public function change($originalObj,$newValue)
    {
        # code...
        $title = $originalObj->title;
        $band = $originalObj->band;

        foreach ($this->containers as $container) {
            # code...
             if (!($originalObj instanceof $container)) {
                 # code...
                 $obj = new $container;
                 $obj->title = $title;
                 $obj->band = $band;

                 foreach ($newValue as $key => $value) {
                     # code...
                     $obj->$key = $value;
                 }

                 $obj->save();
             }
        }
        
    }
}

$titleFromDB = 'was of a RIb';
$bandFromDB =  'Never Again';
$cd = new CD(new MusicContainerMediator);
$cd->title = $titleFromDB;
$cd->band = $bandFromDB;
$cd->changeBandName('Maybe once more');



#end script
相關文章
相關標籤/搜索