个人博客

http://www.milovetingting.cn

外观模式

模式介绍

外观模式在开发过程中的运用频率非常高。通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。外观模式是我们封装API的常用手段。

模式定义

要求一个子系统的外部与内部通信必须通过一个统一的对象进行。

使用场景

  1. 为一个复杂子系统提供一个简单接口。

  2. 当需要构建一个层次结构的子系统,用外观模式定义子系统中每层的入口点。

简单使用

定义Phone接口

1
2
3
4
public interface Phone {
void dial();
void hangup();
}

定义Phono实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
public class PhoneImpl implements Phone {

@Override
public void dial() {
System.out.println("打电话");
}

@Override
public void hangup() {
System.out.println("挂断");
}

}

定义Camera接口

1
2
3
4
5
6
7
public interface Camera {
void open();

void takePhoto();

void close();
}

定义Camera实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CameraImpl implements Camera {

@Override
public void open() {
System.out.println("打开相机");
}

@Override
public void takePhoto() {
System.out.println("拍照");
}

@Override
public void close() {
System.out.println("关闭相机");
}

}

定义MobilePhone类

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
26
27
28
29
30
public class MobilePhone {

private Phone mPhone = new PhoneImpl();

private Camera mCamera = new CameraImpl();

public void dail() {
mPhone.dial();
}

public void hangup() {
mPhone.hangup();
}

public void takePhoto() {
mCamera.open();
mCamera.takePhoto();
}

public void closeCamera() {
mCamera.close();
}

public void videoChat() {
System.out.println("-->视频聊天接通中");
mCamera.open();
mPhone.dial();
}

}

调用

1
2
3
4
5
6
7
8
9
public class Main {

public static void main(String[] args) {
MobilePhone mobilePhone = new MobilePhone();
mobilePhone.takePhoto();
mobilePhone.videoChat();
}

}

输出结果

1
2
3
4
5
打开相机
拍照
-->视频聊天接通中
打开相机
打电话