java中介者模式

106 阅读2分钟

1532279-20190519182606400-1251744579.png

定义一个中介者接口以及相关方法

//中介者接口类
public interface Mediator {
    //注册委员
    void register(String lname,ClassLeader c);
    
    //班长根据委员名字获得通知请求
    void command(String lname);
}

定义一个学委的接口以及相关方法

//班干部接口
public interface ClassLeader {
    //本职工作
    void job();
    
    //向班长提出请求
    void sendRequest();
}

具体学委角色

//生活委员
public class LifeLeader implements ClassLeader {
    //持有对班长大人的引用
    private Mediator media;

    public LifeLeader(Mediator media) {
        super();
        this.media = media;
        media.register("LifeLeader", this);
    }

    @Override
    public void job() {
        System.out.println("生活委员->小张最近生活作风有点问题,需要我的帮助!");
    }

    @Override
    public void sendRequest() {
        System.out.println("生活委员->小张是不是有什么精神负担,班长大人去叫心理委员去看看什么情况吧!");
        media.command("phycologic");
    }
}
//心理委员
public class PhychologicalLeader implements ClassLeader {
    //持有对班长大人的引用
    private Mediator media;
    public PhychologicalLeader(Mediator media) {
        super();
        this.media = media;
        media.register("phycologic", this);
    }

    @Override
    public void job() {
        System.out.println("心理委员->小张最近心情好像不太好,需要我的帮助!");
    }

    @Override
    public void sendRequest() {
        System.out.println("心理委员->小张是不是生活上有什么问题,班长大人叫生活委员多关注一下吧!");
        media.command("LifeLeader");
    }
 
}
//学习委员
public class StudyLeader implements ClassLeader {
      //持有对班长大人的引用
      private Mediator media;
  
      public StudyLeader(Mediator media) {
          super();
          this.media = media;
         media.register("StudyLeader", this);
     }
 
     @Override
     public void job() {
         System.out.println("学习委员->小张最近成绩突飞猛进,果然在我的英明指导下没有人能不起飞!");
     }
 
     @Override
     public void sendRequest() {
         System.out.println("学习委员->小张为了成绩居然还搞抄袭,怎么变成这样了?班长大人快去通知生活委员和心理委员看看情况!");
         media.command("LifeLeader");
         media.command("phycologic");
     }
}

具体中介者角色

import java.util.HashMap;
import java.util.Map;

//班长
public class ClassMonitor implements Mediator {
     //利用map集合存放学委的相关属性
     private Map<String,ClassLeader> map=new HashMap<String,ClassLeader>();
     
     //将对应名称的学委对象进行注册
     @Override
     public void register(String lname, ClassLeader c) {
        map.put(lname, c);
     }
     //班长大人获取来自指定学委的请求通知
     @Override
     public void command(String lname) {
         map.get(lname).job();
     }
}

客户端类

public class Client {
  
      public static void main(String[] args) {
          
         Mediator m=new ClassMonitor();
         ClassLeader life=new LifeLeader(m);
         ClassLeader study=new StudyLeader(m);
         ClassLeader phycho=new PhychologicalLeader(m);
         //当前委员发送请求给班长然后通过班长与其他委员通信
         System.out.println("------生活委员->班长->心理委员------");
         life.sendRequest();
         System.out.println("--------------------------");
         System.out.println("------学习委员->班长->心理委员,生活委员------");
         study.sendRequest();
         System.out.println("--------------------------");
         System.out.println("------心理委员->班长->生活委员------");
         phycho.sendRequest();
         System.out.println("--------------------------");
     }
}