`

设计模式(9)- 中介者模式

阅读更多

中介者模式

1.定义

       用一个中介对象来封装一系列对象交互。中介者使得各个对象不需要显示的相互引用,从而使其松散耦合,而且可以独立的改变他们直接的交互。

2.示例代码

      

/*所有需要交互的对象都被视为同事类,同事类持有中介者对象*/
pubic abstract class Colleague{
    //持有中介者对象的接口
    private Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
    public Mediator getMediator(){
        return mediator;
    }
}

/*光驱类,一个同事类,读取光驱数据传递给主板*/
public class CDDriver extends Colleague{
   public CDDriver(Mediator mediator){
       super(mediator);
   }
   /*光驱读取出来的数据*/
   private String data = "";
   /*获取读取的数据*/
   public String getData(){
      return this.data;
   }
   /*读取光盘数据*/
   public void readCD(){
      //逗号前的是视频显示数据,逗号后面的是声音
      this.data = "设计模式,值得好好研究";
      //通知主板,自己的状态发生了改变
      this.getMediator().change(this);
   }
}

/*CPU类,一个同事类,解析数据,传递给主板*/
public class CPU extends Colleague{
    public CPU(Mediator mediator){
       super(mediator);
    }
    //分解出来的视频数据和声音数据
    private String videoData = "";
    private String soundData = "";
    public String getVideoData(){
        return videoData;
    }
    public String getSoundData(){
        return soundData;
    }
    /*处理数据,把视频音频数据解析出来*/
    public void executeData(String data){
        String[] ss = data.split(",");
        this.videoData = ss[0];
        this.soundData = ss[1];
        //通知主板,cpu的工作完成
        this.getMediator().change(this);
    }
}

/*显卡同事类,负责显示数据*/
pubic class VideoCard extends Colleague{
    public VideoCard(Mediator mediator){
       super(mediator);
    }
    /*显示视频数据*/
    pubilc void showData(String data){
       System.out.println("您正在观看的是:" + data);
    }
}

/*声卡同事类,负责播放数据*/
pubic class SoundCard extends Colleague{
    public SoundCard(Mediator mediator){
       super(mediator);
    }
    /*显示视频数据*/
    pubilc void soundData(String data){
       System.out.println("画外音:" + data);
    }
}

   

/*中介者对象接口*/
pubic interface Mediator{
    /*同事对象在自身状态改变的时候通知中介者的方法*/
    public void changed(Colleague colleague); 
}

/*主板类,实现中介者对象*/
public class MotherBoard implements Mediator{
    /*需要知道交互的同事类-光驱类*/
    private CDDirver cdDriver = null ;
    /*需要知道交互的同事类-cpu类*/
    private CPU cpu = null ;
    /*需要知道交互的同事类-显卡类*/
    private VideoCard videoCard = null ;
    /*需要知道交互的同事类-声卡类*/
    private SoundCard soundCard = null ;
    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 colleague){
         if(colleague == cdDriver){
            //光驱已经读取了数据
            this.openCDDriverReadData((CDDriver)colleague);
         }else if(colleague == cpu){
            //cpu已经解析了数据
            this.openCPU((CPU)colleague);
         }
    }
    /*处理光驱读取完的数据与其他对象交互*/
    private void openCDDriverReadData(CDDriver cd){
         //读取光驱数据
         String data = cd.getData();
         //把数据交给cpu处理
         this.cpu.executeData(data);
    }
    /*处理cpu解析完的数据与其他对象交互*/
    private void openCPU(CPU cpu){
         //读取cpu处理的数据
         String videoData = cd.getVedioData();
         String soundData = cd.getSoundData();
         //把数据交给显卡和声卡处理
         this.videoCard.showData(videoData);
         this.soundData.soundData(soundData);
    }
}

   

/*播放电影示意操作*/
public class Client{
    public static void main(String args[]){
        //1.创建中介者对象
        MotherBoard mediator = new MotherBoard();
        //2.创建同事类
        CDDriver cd = new CDDriver(mediator);
        CPU cpu = new CPU(mediator);
        VideoCard vc = new VideoCard(mediator);
        SoundCard sc = new SoundCard(mediator);
        //3.让中介者知道所有的同事
        mediator.setCdDriver(cd);
        mediator.setCpu(cpu);
        mediator.setVideoCard(vc);
        mediator.setSoundCard(sc);
        //4.打开光驱看电影
        cd.readCD();
    }
}

 

3.实际应用

       中介者模式通过把多个同事对象之间的交互封装到中介者对象里边,从而使的同事对象之间松散耦合。多个同事对象的交互,被封装到中介者里边集中管理。缺点是过度集中化。

 

中介者模式的本质:封装交互
分享到:
评论

相关推荐

    JAVA-设计模式-行为型模式-中介者模式

    JAVA-设计模式-行为型模式-中介者模式

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    设计模式 - 中介者模式

    中介者模式是一种行为设计模式,它用于减少多个对象之间的复杂交互,将这些对象通过一个共同的对象——中介者联系起来,使得各对象之间不再直接引用,而是通过中介者进行通信。这种模式降低了对象间的耦合度,提高了...

    java设计模式-中介者模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    设计模式专题之(十七)中介者模式---设计模式中介者模式示例代码(python--c++)

    **中介者模式**是软件设计模式中的一种结构型模式,它的主要目的是降低多个对象之间的复杂交互,通过引入一个中介对象来统一这些交互。在实际应用中,当对象间的交互变得日益复杂,导致类与类之间的关系过于紧密时,...

    设计模式 - 中介者模式(C++实例)

    **中介者模式(Mediator Pattern)**是一种行为设计模式,它定义了一个用来封装一系列对象交互的接口。在软件工程中,当多个对象之间存在复杂的相互依赖关系时,这种模式可以帮助我们降低系统的耦合度,使得各个对象...

    java常用设计模式-中介者模式

    中介者模式(Mediator Pattern)是一种行为设计模式,它允许对象之间通过中介者对象进行通信,从而避免对象之间的直接耦合。中介者模式将对象之间的复杂关系转化为中介者和对象之间的简单关系,从而提高了系统的灵活...

    c++设计模式-行为型模式-中介者模式

    c++设计模式-行为型模式-中介者模式;qt工程;c++简单源码; 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。...设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    设计模式-中介者模式(讲解及其实现代码)

    在众多设计模式中,中介者模式是一种行为设计模式,它的主要目的是降低对象之间的耦合性,使得对象之间的通信更加清晰和简洁。本文将深入讲解中介者模式,并提供具体的实现代码。 中介者模式的核心思想是引入一个...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。GoF(Gang of Four)23种设计模式是软件开发中的经典,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...

    设计模式精解-GoF 23种设计模式

    GoF(Gang of Four)23种设计模式是业界广泛认可的经典设计模式集合,由《设计模式:可复用面向对象软件的基础》一书中的四位作者提出。这些模式分为创建型、结构型和行为型三大类,涵盖了多种软件设计原则和技巧,...

    JAVA设计模式—中介者模式

    今天我们要探讨的是“中介者模式”,一种在对象间建立通信桥梁的设计模式,它使得原本直接相互依赖的对象可以解耦,降低系统的复杂性。 在Java中,中介者模式通过一个中心类(中介者)来协调各个对象之间的交互,...

Global site tag (gtag.js) - Google Analytics