Mediator模式(中介者)

來源:互聯網
上載者:User


  Java深入到一定程度,就不可避免的碰到設計模式這一概念,瞭解設計模式,將使自己對java中的介面或抽象類別應用有更深的理解.設計模式在java的中型系統中應用廣泛,遵循一定的編程模式,才能使自己的代碼便於理解,易於交流,Mediator(中介者模式)模式是比較常用的一個模式.
  Mediator中介者模式,當多個對象彼此間都有聯絡的時候,我們就可以應用Mediator將對象間的多對多關係轉換為一對多的關係,這樣做,可以使各個對象間的耦合鬆散。統一管理對象間的互動。但也可能使得Mediator對象成為一個系統中的龐然大物,難以維護
   使用情境:集中負責維護物件模型的關係完整性 以及需要封裝對象間互動方式的時候.
  其實MVC中的controller就是一種Mediator,是UI層和後端應用sevice層間的中介者。中介者將互動的複雜性變為中介者的複雜性

 

  在此寫了7個java類來描述說明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() {
    returnmediator;
  }
  public Colleague(Mediator m) {
    mediator =m;
  }
 
  //訊息
  private String message;
  public String getMessage() {
    returnmessage;
  }
  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  themessage  -'" + 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  themessage  -'" + 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  themessage  -'" + 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(Colleaguesender);
  //加入Colleague對象
  public abstract void addCollegue(Colleaguecolleague);
}
===============   5 end

 

===============   6、ConcreteMediator.java
 具體的中介者,負責管理Colleague對象間的關係、以及Colleague對象間的互動
package mediator;

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

public class ConcreteMediator extends Mediator {

  privateList<Colleague> colleagues = newArrayList<Colleague>(0);
 
  public void addCollegue(Colleague colleague){
   colleagues.add(colleague);
  }

  public void action(Colleague actor) {
    String msg =actor.getMessage();
    //sendmsg
    for(Colleague colleague : colleagues) {
     if(colleague.equals(actor)){
       colleague.sendMsg();
       break;
     }
    }
   
    //gotmsg
    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對象中
    Mediatormediator = new ConcreteMediator();
    Colleaguecolleague1 = new Colleague1(mediator);
    Colleaguecolleague2 = new Colleague2(mediator);
    Colleaguecolleague3 = 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.