zoukankan      html  css  js  c++  java
  • 中介者模式

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

     


     

     

    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

     

  • 相关阅读:
    JMETER接口测试问题三之Host of origin may not be blank
    JMETER接口测试问题解决二之后续接口请求依赖登录接口的操作
    JMETER接口测试问题一之请求超时报错
    jmeter接口测试之json提取器的使用方法二
    JMETER接口测试之Debug sample
    JMTER接口测试之JSON提取器
    EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改
    Linq的整型或实体类null引发的报错问题
    SqlServer 统计1-12月份 每个月的数据(临时表)
    select2的多选下拉框上传
  • 原文地址:https://www.cnblogs.com/jinzhengquan/p/1935899.html
Copyright © 2011-2022 走看看