大家好,欢迎来到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