php,java实现中介者模式

来源:互联网 发布:avmo.pw cn新域名 编辑:程序博客网 时间:2024/06/07 09:40

当多个对象之间产生网状的关系时,适合中介者模式,把多对多的依赖转化为只对中介者的依赖

类图
这里写图片描述

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();
0 0