PHP設計模式 - 中介者模式

中介者模式用於開發一個對象,這個對象可以在相似對象相互之間不直接相互的狀況下傳送或者調解對這些對象的集合的修改。 通常處理具備相似屬性,須要保持同步的非耦合對象時,最佳的作法就是中介者模式。PHP中不是特別經常使用的設計模式。php

<?php
abstract class Mediator { // 中介者角色
    abstract public function send($message,$colleague); 
} 

abstract class Colleague { // 抽象對象
    private $_mediator = null; 
    public function __construct($mediator) { 
        $this->_mediator = $mediator; 
    } 
    public function send($message) { 
        $this->_mediator->send($message,$this); 
    } 
    abstract public function notify($message); 
} 

class ConcreteMediator extends Mediator { // 具體中介者角色
    private $_colleague1 = null; 
    private $_colleague2 = null; 
    public function send($message,$colleague) {
        //echo $colleague->notify($message);
        if($colleague == $this->_colleague1) { 
            $this->_colleague1->notify($message); 
        } else { 
            $this->_colleague2->notify($message); 
        } 
    }
    public function set($colleague1,$colleague2) { 
        $this->_colleague1 = $colleague1; 
        $this->_colleague2 = $colleague2; 
    } 
} 

class Colleague1 extends Colleague { // 具體對象角色
    public function notify($message) {
        echo 'colleague1:'.$message."<br>";
    } 
} 

class Colleague2 extends Colleague { // 具體對象角色
    public function notify($message) { 
        echo 'colleague2:'.$message."<br>";
    } 
} 

// client
$objMediator = new ConcreteMediator(); 
$objC1 = new Colleague1($objMediator); 
$objC2 = new Colleague2($objMediator); 
$objMediator->set($objC1,$objC2); 
$objC1->send("to c2 from c1"); //輸出:colleague1:to c2 from c1
$objC2->send("to c1 from c2"); //輸出:colleague2:to c1 from c2
相關文章
相關標籤/搜索