行为型模式之十:中介者模式
行为型模式之十:中介者模式
刀狂剑痴 发表于2年前
行为型模式之十:中介者模式
  • 发表于 2年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

中介者模式是用来协调一组同事,这些同事可能互相不直接交流,而是中介者。 在下面的例子中,Colleague A 想聊天,Colleague B 想打架。当他们做一些动作,他们唤醒中介者去做。

中介者类图

中介者Java代码

package designpatterns.mediator;
 
interface IMediator {
  public void fight();
  public void talk();
  public void registerA(ColleagueA a);
  public void registerB(ColleagueB a);
}
 
//concrete mediator
class ConcreteMediator implements IMediator{
 
  ColleagueA talk;
  ColleagueB fight;
 
  public void registerA(ColleagueA a){
    talk = a;
  }
 
  public void registerB(ColleagueB b){
    fight = b;
  }
 
  public void fight(){
    System.out.println("Mediator is fighting");
    //let the fight colleague do some stuff
  }
 
  public void talk(){
    System.out.println("Mediator is talking");
    //let the talk colleague do some stuff
  }
}
 
abstract class Colleague {
  IMediator mediator;
  public abstract void doSomething();
}
 
//concrete colleague
class ColleagueA extends Colleague {
 
  public ColleagueA(IMediator mediator) {
    this.mediator = mediator;
  }
 
  @Override
  public void doSomething() {
    this.mediator.talk();
    this.mediator.registerA(this);
  }
}
 
//concrete colleague
class ColleagueB extends Colleague {
  public ColleagueB(IMediator mediator) {
    this.mediator = mediator;
    this.mediator.registerB(this);
  }
 
  @Override
  public void doSomething() {
    this.mediator.fight();
  }
}
 
public class MediatorTest {
  public static void main(String[] args) {
    IMediator mediator = new ConcreteMediator();
 
    ColleagueA talkColleague = new ColleagueA(mediator);
    ColleagueB fightColleague = new ColleagueB(mediator);
 
    talkColleague.doSomething();
    fightColleague.doSomething();
  }
}

在行为模式中,观察者模式最像中介者,你可以在观察者模式中比较两者。

共有 人打赏支持
粉丝 18
博文 111
码字总数 82582
×
刀狂剑痴
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: