File tree Expand file tree Collapse file tree 13 files changed +326
-0
lines changed Expand file tree Collapse file tree 13 files changed +326
-0
lines changed Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+
4+ /**
5+ * 光驱同事
6+ * CD设备负责读取光盘的数据并将数据提供给主板
7+ */
8+ public class CDDevice extends Colleague {
9+
10+ private String data ;//视频数据
11+
12+ public CDDevice (Mediator mediator ) {
13+ super (mediator );
14+ }
15+
16+ /**
17+ * 读取视频数据
18+ *
19+ * @return 视频数据
20+ */
21+ public String read () {
22+ return data ;
23+ }
24+
25+ /**
26+ * 加载视频数据
27+ */
28+ public void load () {
29+ // 实际情况中视频数据与音频诗句都在一个数据流中
30+ data = "视频数据,音频数据" ;
31+ mediator .changed (this );
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+ /**
4+ * CPU同事,负责从主板传递来的音、视频数据的解码
5+ */
6+ public class CPU extends Colleague {
7+
8+ private String dataVideo , dataSound ;//视频和音频数据
9+
10+ public CPU (Mediator mediator ) {
11+ super (mediator );
12+ }
13+
14+ /**
15+ * 获取视频数据
16+ *
17+ * @return 视频数据
18+ */
19+ public String getDataVideo () {
20+ return dataVideo ;
21+ }
22+
23+ /**
24+ * 获取音频数据
25+ *
26+ * @return 音频数据
27+ */
28+ public String getDataSound () {
29+ return dataSound ;
30+ }
31+
32+
33+ /**
34+ * 解码数据
35+ *
36+ * @param data 音、视频数据
37+ */
38+ public void decodeData (String data ) {
39+
40+ //分隔 音、视频数据
41+ String [] temp = data .split ("," );
42+
43+ //解析音、视频数据
44+ dataVideo = temp [0 ];
45+ dataSound = temp [1 ];
46+
47+ mediator .changed (this );
48+
49+ }
50+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+
4+ /**
5+ * 通过客户端来模式电脑播放电影的效果
6+ */
7+ public class Client {
8+
9+ public static void main (String [] args ) {
10+
11+ //构造主板对象
12+ MainBoard mediator = new MainBoard ();
13+
14+ //分别构造各个零部件
15+ CDDevice cdDevice = new CDDevice (mediator );
16+ CPU cpu = new CPU (mediator );
17+ GraphicsCard gc = new GraphicsCard (mediator );
18+ SoundCard soundCard = new SoundCard (mediator );
19+
20+ //将各个零部件安装到主板
21+ mediator .setCdDevice (cdDevice );
22+ mediator .setCpu (cpu );
23+ mediator .setSoundCard (soundCard );
24+ mediator .setGraphicsCard (gc );
25+
26+ //完成后就可以开始放片了
27+ cdDevice .load ();
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+
4+ //抽象同事
5+ public abstract class Colleague {
6+ protected Mediator mediator ;//每一个同事都应该知道它的中介者
7+
8+ public Colleague (Mediator mediator ) {
9+ this .mediator = mediator ;
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+
4+ /**
5+ * 显卡同事 :播放视频
6+ */
7+ public class GraphicsCard extends Colleague {
8+ public GraphicsCard (Mediator mediator ) {
9+ super (mediator );
10+ }
11+
12+ /**
13+ * 播放视频
14+ *
15+ * @param data 视频数据
16+ */
17+ public void videoPlay (String data ) {
18+ System .out .println ("视频:" + data );
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+
4+ /**
5+ * 主板中介者
6+ */
7+ public class MainBoard extends Mediator {
8+
9+ private CDDevice cdDevice ;//光驱设备
10+ private CPU cpu ;// CPU
11+ private SoundCard soundCard ;//声卡设备
12+ private GraphicsCard graphicsCard ;//显卡设备
13+
14+
15+ @ Override
16+ public void changed (Colleague c ) {
17+ // 如果光驱读取了数据
18+ if (c == cdDevice ) { //关于此处为什么用 == 而不是instanceOf 是因为在客户端最终调用之前给中介者
19+ // 设置了同一个光驱 和 cpu,所以比较的内存地址
20+ handleCD ((CDDevice ) c );
21+ } else if (c == cpu ) {//如果CPU处理完数据
22+ handleCPU ((CPU ) c );
23+ }
24+ }
25+
26+ /**
27+ * 处理光驱读取数据后与其他设备的交互
28+ *
29+ * @param cdDevice
30+ */
31+ private void handleCD (CDDevice cdDevice ) {
32+ cpu .decodeData (cdDevice .read ());
33+ }
34+
35+ /**
36+ * 处理cpu读取数据后与其他设备的交互
37+ *
38+ * @param cpu
39+ */
40+ private void handleCPU (CPU cpu ) {
41+ soundCard .soundPlay (cpu .getDataSound ());
42+ graphicsCard .videoPlay (cpu .getDataVideo ());
43+ }
44+
45+
46+ /**
47+ * 设置CD设备
48+ *
49+ * @param cdDevice cd设备
50+ */
51+ public void setCdDevice (CDDevice cdDevice ) {
52+ this .cdDevice = cdDevice ;
53+ }
54+
55+
56+ /**
57+ * 设置cpu
58+ *
59+ * @param cpu
60+ */
61+ public void setCpu (CPU cpu ) {
62+ this .cpu = cpu ;
63+ }
64+
65+
66+ /**
67+ * 设置声卡
68+ *
69+ * @param soundCard 声卡设备
70+ */
71+ public void setSoundCard (SoundCard soundCard ) {
72+ this .soundCard = soundCard ;
73+ }
74+
75+ /**
76+ * 设置显卡
77+ *
78+ * @param graphicsCard 显卡设备
79+ */
80+ public void setGraphicsCard (GraphicsCard graphicsCard ) {
81+ this .graphicsCard = graphicsCard ;
82+ }
83+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+ //抽象中介者
4+ public abstract class Mediator {
5+
6+ /**
7+ * 同事对象改变时通知中介者的方法
8+ * 在同事对象改变时由中介者去通知其他的同事对象
9+ *
10+ * @param c 同事对象
11+ */
12+ public abstract void changed (Colleague c );
13+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .computer ;
2+
3+ /**
4+ * 声卡同事
5+ */
6+ public class SoundCard extends Colleague {
7+ public SoundCard (Mediator mediator ) {
8+ super (mediator );
9+ }
10+
11+ /**
12+ * 播放音频
13+ *
14+ * @param data 音频数据
15+ */
16+ public void soundPlay (String data ) {
17+ System .out .println ("音频: " + data );
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .model ;
2+
3+
4+ //抽象同事
5+ public abstract class Colleague {
6+ protected Mediator mediator ;
7+
8+ public Colleague (Mediator mediator ) {
9+ this .mediator = mediator ;
10+ }
11+
12+ /**
13+ * 同事角色的具体行为,由子类实现
14+ */
15+ public abstract void action ();
16+ }
Original file line number Diff line number Diff line change 1+ package com .company .mediator .model ;
2+
3+ public class ConcreteColleagueA extends Colleague {
4+ public ConcreteColleagueA (Mediator mediator ) {
5+ super (mediator );
6+ }
7+
8+ @ Override
9+ public void action () {
10+ System .out .println ("ColleagueA 将信息递交给中介者处理" );
11+ }
12+ }
You can’t perform that action at this time.
0 commit comments