1. 外观模式概述
概念
- 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式
- 外观模式体现的就是 Java 中的封装思想。将多个子系统封装起来,提供一个更简洁的接口供外部调用
特点
外观模式非常简单,外观模式使得两种不同的类不用直接交互,而是通过一个中间件,也就是外观类间接交互。外观类中只需要暴露简洁的接口,隐藏内部的细节,所以说白了就是封装的思想,封装起来的类就是外观类
外观模式非常常用(写代码当然需要封装),尤其是在第三方库的设计中,应该提供尽量简洁的接口供外部调用。另外,在 MVC 架构中,C 层 Controller 就可以看作是外观类,Model 和 View 层通过 Controller 交互,减少了耦合
Demo
新建浏览器类
1
2
3
4
5
6
7
8
9public class Browser {
public static void open() {
System.out.println("打开浏览器");
}
public static void close() {
System.out.println("关闭浏览器");
}
}新建 IDE 类
1
2
3
4
5
6
7
8
9public class IDE {
public static void open() {
System.out.println("打开 IDE");
}
public static void close() {
System.out.println("关闭 IDE");
}
}新建微信类
1
2
3
4
5
6
7
8
9public class Wechat {
public static void open() {
System.out.println("打开微信");
}
public static void close() {
System.out.println("关闭微信");
}
}客户端调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class Client {
@Test
public void test() {
System.out.println("上班:");
Browser.open();
IDE.open();
Wechat.open();
System.out.println("下班:");
Browser.close();
IDE.close();
Wechat.close();
}
}运行程序,输出如下
1
2
3
4
5
6
7
8上班:
打开浏览器
打开 IDE
打开微信
下班:
关闭浏览器
关闭 IDE
关闭微信外观模式:因为每天都有做着几件事,可以将这几个子系统封装起来,提供更简洁的接口
1
2
3
4
5
6
7
8
9
10
11
12
13public class Facade {
public void open() {
Browser.open();
IDE.open();
Wechat.open();
}
public void close() {
Browser.close();
IDE.close();
Wechat.close();
}
}客户端可以简化代码,只和这个外观类打交道
1
2
3
4
5
6
7
8
9
10
11public class Client {
@Test
public void test() {
Facade facade = new Facade();
System.out.println("上班:");
facade.open();
System.out.println("下班:");
facade.close();
}
}