中介者模式

中介者模式用一个中介对象来封装一系列的对象交互,从而使它们可以较松散的耦合。

 


 

 

1) 抽象中介者(Mediator)角色:抽象中介者角色定义统一的接口用于各同事角色之间的通信。

2)
具体中介者(Concrete Mediator)角色:具体中介者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。

3)
同事(Colleague)角色:每一个同事角色都知道对应的具体中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。

 

 

在此写了7java类来描述说明Mediator设计模式的实现方式;

  1 Colleague.java   交互对象的抽象类
  2
Colleague1.java  交互对象1
  3
Colleague2.java  交互对象2
  4
Colleague3.java  交互对象3
  5
Mediator.java    中介者抽象类
  6
ConcreteMediator.java 具体的中介者
  7
MediatorTest.java     带有main方法的测试类

 

===============   1 Colleague.java
交互对象的抽象类,定义了中介者的注入方法 、交互的行为方法
package mediator;

public abstract class Colleague {
  //
中介者
  private Mediator mediator;
  public Mediator getMediator() {
    return mediator;
  }
  public Colleague(Mediator m) {
    mediator = m;
  }
 
  //
消息
  private String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }

  //发送消息
  public abstract void sendMsg();

  //收到消息
  public abstract void getMsg(String msg);

  //发送消息
  public void sendMsg(String msg) {
    this.message = msg;
    mediator.action(this);
  }
}
===============   1 end

 

===============   2 Colleague1.java
package mediator;

public class Colleague1 extends Colleague {
  public Colleague1(Mediator m) {
    super(m);
  }

  public void getMsg(String msg) {
    System.out.println("Colleague1 has got  the message  -'" + msg + "'");
  }

  public void sendMsg() {
    System.out.println("Colleague1 has send the message '" + getMessage() + "'");
  }
}
===============   2 end

 

===============   3 Colleague2.java
package mediator;

public class Colleague2 extends Colleague {
  public Colleague2(Mediator m) {
    super(m);
  }

  public void getMsg(String msg) {
    System.out.println("Colleague2 has got  the message  -'" + msg + "'");
  }

  public void sendMsg() {
    System.out.println("Colleague2 has send the message '" + getMessage() + "'");
  }
}
===============   3 end

 

===============   4 Colleague3.java
package mediator;

public class Colleague3 extends Colleague {
  public Colleague3(Mediator m) {
    super(m);
  }

  public void getMsg(String msg) {
    System.out.println("Colleague3 has got  the message  -'" + msg + "'");
  }

  public void sendMsg() {
    System.out.println("Colleague3 has send the message '" + getMessage() + "'");
  }
}
===============   4 end

 

===============   5 Mediator.java
package mediator;

abstract class Mediator {
  //Mediator
针对Colleague的一个交互行为
  public abstract void action(Colleague sender);
  //
加入Colleague对象
  public abstract void addCollegue(Colleague colleague);
}
===============   5 end

 

===============   6 ConcreteMediator.java
 
具体的中介者,负责管理Colleague对象间的关系、以及Colleague对象间的交互
package mediator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteMediator extends Mediator {

  private List<Colleague> colleagues = new ArrayList<Colleague>(0);
 
  public void addCollegue(Colleague colleague) {
    colleagues.add(colleague);
  }

  public void action(Colleague actor) {
    String msg = actor.getMessage();
    //send msg
    for (Colleague colleague : colleagues) {
      if(colleague.equals(actor)){
        colleague.sendMsg();
        break;
      }
    }
   
    //got msg
    for (Colleague colleague : colleagues) {
      if(colleague.equals(actor))
        continue;
       
      colleague.getMsg(msg);
    }
  }
}
===============   6 end

 

===============   7 MediatorTest.java
package mediator;

public class MediatorTest {

  public static void main(String[] args) {
   //
生成中介者 并注入到各个Colleague对象中
    Mediator mediator = new ConcreteMediator();
    Colleague colleague1 = new Colleague1(mediator);
    Colleague colleague2 = new Colleague2(mediator);
    Colleague colleague3 = new Colleague3(mediator);
 
 //
注册对象到中介
    mediator.addCollegue(colleague1);
    mediator.addCollegue(colleague2);
    mediator.addCollegue(colleague3);
   
 //Colleague1
触发行为
    colleague1.sendMsg("Hi,it's time to lunch. Let's go!");
    System.out.println();
    //Colleague2
触发行为
    colleague2.sendMsg("Is anybody here!");
    System.out.println();
    //Colleague3
触发行为
    colleague3.sendMsg("Wait!I will lunch off right away.");
    System.out.println();
   
  }
}
===============   7 end

 

原文地址:https://www.cnblogs.com/jinzhengquan/p/1935899.html