模式介绍

外观模式是一种结构型设计模式,它为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

使用场景

  • 当您需要为复杂子系统提供一个简单接口时
  • 当子系统与客户端之间存在很大的依赖性时
  • 当您需要构建一个层次结构的子系统时

代码示例

// 子系统类
public class SubSystemA {
    public void operationA() {
        System.out.println("子系统A的操作");
    }
}

public class SubSystemB {
    public void operationB() {
        System.out.println("子系统B的操作");
    }
}

public class SubSystemC {
    public void operationC() {
        System.out.println("子系统C的操作");
    }
}

// 外观类
public class Facade {
    private SubSystemA subSystemA;
    private SubSystemB subSystemB;
    private SubSystemC subSystemC;

    public Facade() {
        subSystemA = new SubSystemA();
        subSystemB = new SubSystemB();
        subSystemC = new SubSystemC();
    }

    public void operation() {
        subSystemA.operationA();
        subSystemB.operationB();
        subSystemC.operationC();
    }
}

优缺点

优点

  • 对客户屏蔽了子系统组件
  • 实现了子系统与客户之间的松耦合关系
  • 降低了大型软件系统中的编译依赖性

缺点

  • 不能很好地限制客户使用子系统类
  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类
  • 外观类可能会变得过于庞大