生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap10 中介者模式Mediator(1)简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 使用場景
如果電腦沒有主板,各個配件的關系為
有主板后:
2. 中介者模式簡介:各對象通過中介者來交互
public interface Mediator { public void changed(Colleague colleague
);
}
public abstract class Colleague { private Mediator mediator
;public Colleague(Mediator mediator
) {this.mediator
= mediator
;}public Mediator getMediator() {return mediator
;}
}
public class ConcreteColleagueB extends Colleague
{public ConcreteColleagueB(Mediator mediator
) {super(mediator
);}public void someOperation() { getMediator().changed(this);}
}
public class ConcreteColleagueA extends Colleague
{public ConcreteColleagueA(Mediator mediator
) {super(mediator
);}public void someOperation() { getMediator().changed(this);}
}
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
) {MotherBoard mediator
= new MotherBoard();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
.setVideoCard(vc
);mediator
.setSoundCard(sc
);cd
.readCD();}
}
public abstract class Colleague {private Mediator mediator
;public Colleague(Mediator mediator
) {this.mediator
= mediator
;}public Mediator getMediator() {return mediator
;}
}
public interface Mediator {public void changed(Colleague colleague
);
}
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
){this.opeCPU((CPU
)colleague
);}}private void opeCDDriverReadData(CDDriver cd
){String data
= cd
.getData();this.cpu
.executeData(data
);}private void opeCPU(CPU cpu
){String videoData
= cpu
.getVideoData();String soundData
= cpu
.getSoundData();this.videoCard
.showData(videoData
);this.soundCard
.soundData(soundData
);}
}
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];this.getMediator().changed(this);}
}
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);}
}
public class VideoCard extends Colleague
{public VideoCard(Mediator mediator
) {super(mediator
);}public void showData(String data
){System
.out.println("您正觀看的是:"+data
);}
}
public class SoundCard extends Colleague
{public SoundCard(Mediator mediator
) {super(mediator
);}public void soundData(String data
){System
.out.println("畫外音:"+data
);}
}
總結
以上是生活随笔為你收集整理的《研磨设计模式》chap10 中介者模式Mediator(1)简介的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。