日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《研磨设计模式》chap10 中介者模式Mediator(1)简介

發布時間:2025/3/21 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap10 中介者模式Mediator(1)简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 使用場景

如果電腦沒有主板,各個配件的關系為

有主板后:

2. 中介者模式簡介:各對象通過中介者來交互

//Mediator.java public interface Mediator { public void changed(Colleague colleague); }//Colleague.java public abstract class Colleague { private Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}public Mediator getMediator() {return mediator;} }//ConcreteColleagueB.java public class ConcreteColleagueB extends Colleague {public ConcreteColleagueB(Mediator mediator) {super(mediator);}public void someOperation() { getMediator().changed(this);} }//ConcreteColleagueA.java public class ConcreteColleagueA extends Colleague {public ConcreteColleagueA(Mediator mediator) {super(mediator);}public void someOperation() { getMediator().changed(this);} }//ConcreteMediator.java public class ConcreteMediator implements Mediator { private ConcreteColleagueA colleagueA; private ConcreteColleagueB colleagueB;public void setConcreteColleagueA(ConcreteColleagueA colleague) {colleagueA = colleague;}public void setConcreteColleagueB(ConcreteColleagueB colleague) {colleagueB = colleague;}public void changed(Colleague colleague) { } }

3. 將中介者模式應用到場景中:主板其實就是一個中介

Client.java 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();} }//Colleague.java /*** 同事類的抽象父類*/ public abstract class Colleague {/*** 持有中介者對象,每一個同事類都知道它的中介者對象*/private Mediator mediator;/*** 構造方法,傳入中介者對象* @param mediator 中介者對象*/public Colleague(Mediator mediator) {this.mediator = mediator;}/*** 獲取當前同事類對應的中介者對象* @return 對應的中介者對象*/public Mediator getMediator() {return mediator;} }//Mediator.java /*** 中介者對象的接口*/ public interface Mediator {/*** 同事對象在自身改變的時候來通知中介者的方法,* 讓中介者去負責相應的與其他同事對象的交互* @param colleague 同事對象自身,好讓中介者對象通過對象實例* 去獲取同事對象的狀態*/public void changed(Colleague colleague); }//MotherBoard.java /*** 主板類,實現中介者接口*/ public class MotherBoard implements Mediator{ private CDDriver cdDriver = null; 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.opeCDDriverReadData((CDDriver)colleague);}else if(colleague == cpu){//表示CPU處理完了this.opeCPU((CPU)colleague);}}/*** 處理光驅讀取數據過后與其他對象的交互* @param cd 光驅同事對象*/private void opeCDDriverReadData(CDDriver cd){//1:先獲取光驅讀取的數據String data = cd.getData();//2:把這些數據傳遞給CPU進行處理this.cpu.executeData(data);}/*** 處理CPU處理完數據后與其他對象的交互* @param cpu CPU同事類*/private void opeCPU(CPU cpu){//1:先獲取CPU處理過后的數據String videoData = cpu.getVideoData();String soundData = cpu.getSoundData();//2:把這些數據傳遞給顯卡和聲卡展示出來this.videoCard.showData(videoData);this.soundCard.soundData(soundData);} }//CPU.java /*** 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;}/*** 處理數據,把數據分成音頻和視頻的數據* @param data 被處理的數據*/public void executeData(String data){//把數據分解開,前面的是視頻數據,后面的是音頻數據String [] ss = data.split(",");this.videoData = ss[0];this.soundData = ss[1];//通知主板,CPU的工作完成this.getMediator().changed(this);} }//CDDriver.java /*** 光驅類,一個同事類*/ 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().changed(this);} }//VideoCard.java /*** 顯卡類,一個同事類*/ public class VideoCard extends Colleague{public VideoCard(Mediator mediator) {super(mediator);}public void showData(String data){System.out.println("您正觀看的是:"+data);} }//SoundCard.java /*** 聲卡類,一個同事類*/ public class SoundCard extends Colleague{public SoundCard(Mediator mediator) {super(mediator);}public void soundData(String data){System.out.println("畫外音:"+data);} }

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap10 中介者模式Mediator(1)简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。