本文主要分析设计模式 - 结构型 - 外观(Facade),它提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。
外观模式 (Facade) 是一种结构型设计模式, 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观 (Facade) 提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求, 知晓如何操作一切活动部件。
创建附加外观 (Additional Facade) 类可以避免多种不相关的功能污染单一外观, 使其变成又一个复杂结构。 客户端和其他外观都可使用附加外观。
复杂子系统 (Complex Subsystem) 由数十个不同对象构成。 如果要用这些对象完成有意义的工作, 你必须深入了解子系统的实现细节, 比如按照正确顺序初始化对象和为其提供正确格式的数据。子系统类不会意识到外观的存在, 它们在系统内运作并且相互之间可直接进行交互。
客户端 (Client) 使用外观代替对子系统对象的直接调用。
Facade : 了解每个子系统类的功能,负责分发客户端的请求给各个子系统去处理。
- class Class1 {
- public void op1() {
- System.out.println("方法1");
- }
- }
-
- class Class2 {
- public void op2() {
- System.out.println("方法2");
- }
- }
-
- class Class3 {
- public void op3() {
- System.out.println("方法3");
- }
- }
Subsystem Classes : 实现子系统功能。在不感知 Facade 的情况下,处理 Facade 对象分配的工作
- class Facade {
- private Class1 one = new Class1();
- private Class2 two = new Class2();
- private Class3 three = new Class3();
-
- public void op1() {
- System.out.println("Facade op1()");
- one.op1();
- }
-
- public void op2() {
- System.out.println("Facade op2()");
- two.op2();
- }
-
- public void op3() {
- System.out.println("Facade op3()");
- three.op3();
- }
-
- public void Method() {
- System.out.println("Facade Method()");
- three.op3();
- two.op2();
- one.op1();
- }
- }
- public class FacadePattern {
- public static void main(String[] args) {
- Facade facade = new Facade();
- facade.Method();
-
- facade.op1();
- }
- }
-
-
- ----------------------------------
- Facade Method()
- 方法3
- 方法2
- 方法1
- Facade op1()
- 方法1