当多个对象之间产生网状的关系时,适合中介者模式,把多对多的依赖转化为只对中介者的依赖
类图
java实现
中介者抽象类
public abstract class AbsMediation {
private Colleague1 colleague1;
private Colleague2 colleague2;
public void setColleague1(Colleague1 colleague1){
this.colleague1 = colleague1;
}
public void setColleague2(Colleague2 colleague2){
this.colleague2 = colleague2;
}
public Colleague1 getColleague1(){
return colleague1;
}
public Colleague2 getColleague2(){
return colleague2;
}
public abstract void doSomething1();
public abstract void doSomething2();
}
中介者实现类
public class Mediation extends AbsMediation {
@Override
public void doSomething1() {
this.getColleague1().selfmethod1();
this.getColleague2().selfMethod2();
}
@Override
public void doSomething2() {
this.getColleague1().selfmethod1();
this.getColleague2().selfMethod2();
}
}
具体逻辑抽象类
public class AbsColleague {
protected AbsMediation absMediation;
public AbsColleague(AbsMediation absMediation){
this.absMediation = absMediation;
}
}
实现类1
public class Colleague1 extends AbsColleague {
public Colleague1(AbsMediation absMediation) {
super(absMediation);
}
public void selfmethod1(){
}
public void publishMethod1(){
}
}
public class Colleague2 extends AbsColleague {
public Colleague2(AbsMediation absMediation) {
super(absMediation);
}
public void selfMethod2(){
}
public void publishMethod2(){
}
}
php实现
abstract class AbsColleague
{
protected $mediation;
public function __construct(AbsMediation $mediation)
{
$this->mediation = $mediation;
}
}
class Collegue1 extends AbsColleague
{
public function __construct(AbsMediation $mediation)
{
parent::__construct($mediation);
}
public function selfFunction1()
{
echo 'selfFunction1';
}
public function publishFunction1()
{
echo 'publishFunction1';
}
}
class Collegue2 extends AbsColleague
{
public function __construct(AbsMediation $mediation)
{
parent::__construct($mediation);
}
public function selfFunction2()
{
echo 'selfFunction2';
}
public function publishFunction2()
{
echo 'publishFunction2';
}
}
abstract class AbsMediation
{
protected $collegue1;
protected $collegue2;
public function setCollegue1(Collegue1 $collegue1)
{
$this->collegue1 = $collegue1;
}
public function setCollegue2(Collegue2 $collegue2)
{
$this->collegue2 = $collegue2;
}
public function getCollegue1()
{
return $this->collegue1;
}
public function getCollegue2()
{
return $this->collegue2;
}
public abstract function doSomething1();
public abstract function doSomething2();
}
class Mediation extends AbsMediation
{
public function doSomething1()
{
$this->collegue1->selfFunction1();
$this->collegue2->selfFunction2();
}
public function doSomething2()
{
$this->collegue1->selfFunction1();
$this->collegue2->selfFunction2();
}
}
$mediation = new Mediation;
$collegue1 = new Collegue1($mediation);
$collegue2 = new Collegue2($mediation);
$mediation->setCollegue1($collegue1);
$mediation->setCollegue2($collegue2);
$mediation->doSomething1();