2019-11-02 22:11:39 +08:00
|
|
|
|
## 外观(Facade)
|
|
|
|
|
|
|
|
|
|
### Intent
|
|
|
|
|
|
|
|
|
|
提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。
|
|
|
|
|
|
|
|
|
|
### Class Diagram
|
|
|
|
|
|
2019-12-06 10:11:23 +08:00
|
|
|
|
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f9978fa6-9f49-4a0f-8540-02d269ac448f.png"/> </div><br>
|
2019-11-02 22:11:39 +08:00
|
|
|
|
|
|
|
|
|
### Implementation
|
|
|
|
|
|
|
|
|
|
观看电影需要操作很多电器,使用外观模式实现一键看电影功能。
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class SubSystem {
|
|
|
|
|
public void turnOnTV() {
|
|
|
|
|
System.out.println("turnOnTV()");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setCD(String cd) {
|
|
|
|
|
System.out.println("setCD( " + cd + " )");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void startWatching(){
|
|
|
|
|
System.out.println("startWatching()");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class Facade {
|
|
|
|
|
private SubSystem subSystem = new SubSystem();
|
|
|
|
|
|
|
|
|
|
public void watchMovie() {
|
|
|
|
|
subSystem.turnOnTV();
|
|
|
|
|
subSystem.setCD("a movie");
|
|
|
|
|
subSystem.startWatching();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class Client {
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
Facade facade = new Facade();
|
|
|
|
|
facade.watchMovie();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 设计原则
|
|
|
|
|
|
|
|
|
|
最少知识原则:只和你的密友谈话。也就是说客户对象所需要交互的对象应当尽可能少。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>
|