调停者模式

调停者模式调停者模式 就是让调停者负责同事之间的消息传递 避免同事之间的消息传递 这样会大大减少同事之间的耦合

大家好,欢迎来到IT知识分享网。

调停者模式:就是让调停者负责同事之间的消息传递,避免同事之间的消息传递,这样会大大减少同事之间的耦合。

例如:
主板——调停者
cpu、光驱、视频、音频——同事

同事抽象类
public abstract class Colleague { 
    private Mediator mediator; public Colleague(Mediator mediator) { 
    this.mediator = mediator; } public Mediator getMediator() { 
    return mediator; } } 
调停者接口(想象成主板上的插槽的规范)
public interface Mediator { 
    / * 同事对象在自身改变的时候来通知调停者方法 * 让调停者去负责相应的与其他同事对象的交互 * @param c */ public void changed(Colleague c); } 
调停者实体(按照接口规范造主板,主板内部的通信机制)
public class MainBoard implements Mediator{ 
    private CDDriver cdDriver; private CPU cpu; private VideoCard videoCard; private SoundCard soundCard; public void setCdDriver(CDDriver cdDriver) { 
    this.cdDriver = cdDriver; } public void setCpu(CPU cpu) { 
    this.cpu = cpu; } public void setVideoCard(VideoCard videoCard) { 
    this.videoCard = videoCard; } public void setSoundCard(SoundCard soundCard) { 
    this.soundCard = soundCard; } public void changed(Colleague c) { 
    if(c instanceof CDDriver){ 
    this.opeCDDriverReadData(cdDriver); }else if(c instanceof CPU){ 
    this.opeCpu(cpu); } } public void opeCDDriverReadData(CDDriver cd){ 
    String data = cd.getData(); cpu.executeData(data); } public void opeCpu(CPU cpu){ 
    String videoData = cpu.getVideoData(); String soundData = cpu.getSoundData(); videoCard.showData(videoData); soundCard.soundData(soundData); } } 
光驱
public class CDDriver extends Colleague{ 
    private String data = ""; public CDDriver(Mediator mediator) { 
    super(mediator); } public String getData(){ 
    return data; } public void readCD(String[] s) throws InterruptedException{ 
    for(String temps : s){ 
    Thread.sleep(1000); this.data = temps; this.getMediator().changed(this); } } } 
CPU
public class CPU extends Colleague{ 
    //分解出来的视频数据 private String videoData = ""; //分解出来的声音数据 private String soundData = ""; public CPU(Mediator mediator) { 
    super(mediator); } public String getVideoData() { 
    return videoData; } public String getSoundData() { 
    return soundData; } public void executeData(String data){ 
    String[] array = data.split(","); this.videoData = array[0]; this.soundData = array[1]; this.getMediator().changed(this); } } 
音频
public class SoundCard extends Colleague{ 
    public SoundCard(Mediator mediator) { 
    super(mediator); } public void soundData(String data){ 
    System.out.println("银屏输出:" + data); } } 
视频
public class VideoCard extends Colleague{ 
    public VideoCard(Mediator mediator) { 
    super(mediator); } public void showData(String data){ 
    System.out.println("您正在观看的是:" + data); } } 
使用
public class Client { 
    public static void main(String[] args) throws InterruptedException { 
    //创建调停者-按照规范定制主板 MainBoard mediator = new MainBoard(); //创建同事类_按照规范购买硬件 CDDriver cd = new CDDriver(mediator); CPU cpu = new CPU(mediator); VideoCard vc = new VideoCard(mediator); SoundCard sc = new SoundCard(mediator); // 让调停这知道所有同事_将这些硬件安装在主板上 mediator.setCdDriver(cd); mediator.setCpu(cpu); mediator.setSoundCard(sc); mediator.setVideoCard(vc); // 光盘 String[] s = { 
   "事实上,阿斯顿发","撒旦法,撒的发生的","单方事故,森岛帆高","水电费感受到,非官方的规划","对方过后,发的规划梵蒂冈","规划局法国红酒,去玩儿群翁","问题,热污染特日月潭","惹我同意,尔特让问题","热同一人,热太阳"}; // 读取光盘 cd.readCD(s); } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151058.html

(0)
上一篇 2025-03-15 18:45
下一篇 2025-03-15 19:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信