1 概述
又叫门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
外观(Facade)模式包含以下主要角色:
- 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
- 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。
2 例子
启动一台电脑,电脑内部,包括 CPU 启动、硬盘启动、内存启动等,但是我们无需关心这些细节,电脑自提供一个开机的方法。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public interface Computer { void open(); }
public class Cpu implements Computer { @Override public void open() { System.out.println("启动CPU"); } }
public class Ssd implements Computer { @Override public void open() { System.out.println("启动硬盘"); } }
public class Ddr implements Computer { @Override public void open() { System.out.println("启动内存"); } }
public class Facade { private Computer cpu; private Computer ddr; private Computer ssd; public Facade() { cpu = new Cpu(); ddr = new Ddr(); ssd = new Ssd(); }
public void open() { cpu.open(); ddr.open(); ssd = new Ssd(); } }
public class TestClient { public static void main(String[] args) { Facade facade = new Facade(); facade.open(); } }
|
3 优缺点
优点:
- 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
- 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
缺点: