外观模式

其实外观模式实际上跟适配器模式有一点点相通之处,但是也仅是一点点罢了。

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用

说白了就是做一件事,之前可能要调用一堆接口,但是外观模式把这一堆接口封装到一个接口中,最终用户只需要调用这一个接口就行了,就这么简单。

下面以一个家庭影院为例来说明下外观模式

假设我们有一个家庭影院系统,我们有个遥控器,我们需要先打开爆米花机,然后调暗灯光,然后打开投影仪,放下屏幕,打开DVD,放入碟片,开启DVD等这一系列操作。然而实际上我们只需要一个按键,按下这个按键,上面的事情就都可以做了,这就是外观模式。

首先我们引入几个组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Amplifirer {
public void on() {
System.out.println("Amplifier on!");
}
public void off() {
System.out.println("Amplifier off!");
}
}
public class DvdPlayer {
public void on() {
System.out.println("DvdPlayer on!");
}
public void off() {
System.out.println("DvdPlayer off!");
}
}
public class Tuner {
public void on() {
System.out.println("Tuner on!");
}
public void off() {
System.out.println("Tuner off!");
}
}

然后创建一个外观类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class HomeTheaterFacade {
Amplifirer amplifirer;
Tuner tuner;
DvdPlayer dvdPlayer;

public HomeTheaterFacade(Amplifirer amplifirer,
Tuner tuner,
DvdPlayer dvdPlayer) {
this.amplifirer = amplifirer;
this.tuner = tuner;
this.dvdPlayer = dvdPlayer;
}

public void watchMovie() {
amplifirer.on();
tuner.on();
dvdPlayer.on();
}

public void endMovie() {
amplifirer.off();
tuner.off();
dvdPlayer.off();
}
}

这样就可以对相应的函数调用进行统一的管理了。

最小知识原则:只和你的密友谈话

这个原则实际上是告诉我们要尽量减少类的耦合

代码链接如下

https://github.com/changyuanchn/DesignPattern/tree/main/src/com/changyuan/FacadePattern

显示 Gitment 评论