php设计模式 - 中介者模式

interface Mediator{

	public function sell($name,$number);
}


abstract class Human{

    protected $mediator=null;  
    abstract public  function getThings($number);  
    abstract public function buy($name,$number);  
  
    public function setMediator($mediator)  
    {  
        $this->mediator = $mediator;  
    }  
  
    public function getMediator()  
    {  
        return $this->mediator;  
    }  

}


class ConcreteMediator implements  Mediator{  
    private $orchardist=null;//果农  
    private $boss=null;//化肥老板  
    public function sell($name,$number){  
        if($name == 'fruit'){  
            $fruit=$this->orchardist->getThings($number);  
            echo '商场从果农给你'.$fruit.'!'."\n";  
            return $fruit;  
        }  
        if($name == 'fertilizer'){  
            $fertilizer=$this->boss->getThings($number);  
            echo '商场从化肥老板那里给你'.$fertilizer.'!'."\n";  
            return $fertilizer;  
        }  
    }
	
	public function setOrchardist( $orchardist ){
		$this -> orchardist = $orchardist;
	}

	public function setBoss( $boss ){
		$this -> boss = $boss;
	}

  
}  


class Orchardist extends Human{  
    public function __construct($mediator){  
        $this->mediator=$mediator;  
    }  
    public  function getThings($number){  
        return $number.'水果';  
    }  
    public function buy($name,$number){  
        $result=$this->mediator->sell($name,$number);  
        echo '我们果农得到了'.$result."\n";  
    }

  
}  
  
class Boss extends Human{  
    public function __construct($mediator){  
    $this->mediator=$mediator;  
    }  
    public  function getThings($number){  
        return $number.'化肥';  
    }  
    public function buy($name,$number){  
        $result=$this->mediator->sell($name,$number);  
        echo '我们化肥老板得到了'.$result."\n";  
    }
} 


$mediator=new  ConcreteMediator();  
$orchardist=new Orchardist($mediator);  
$boss=new Boss($mediator);  
$mediator->setOrchardist($orchardist);  
$mediator->setBoss($boss);  
  
  
$orchardist->buy('fertilizer',200);//果农买200袋化肥  
$boss->buy('fruit',50);//化肥老板买50个水果

中介者模式:顾名思义,就是找个中介,就像房屋中介一样。中介者模式使本来对象间一对多的模式转化成一对一的模式,及对象和中介者间的模式,降低了对象之间的耦合度,减少维护成本,是迪米特法则的应用。用两张网上很形象的图来说明:


php设计模式 - 中介者模式_第1张图片
图1:联系方式A 

php设计模式 - 中介者模式_第2张图片
图2:联系方式B 

你可能感兴趣的:(php设计模式 - 中介者模式)