外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[DP]
- 首先,定义子系统的各个组件接口和具体实现类:
- // 子系统组件接口
- public interface SubsystemA {
- void operationA();
- }
-
- public interface SubsystemB {
- void operationB();
- }
-
- public interface SubsystemC {
- void operationC();
- }
-
- // 子系统组件的具体实现
- public class ConcreteSubsystemA implements SubsystemA {
- @Override
- public void operationA() {
- System.out.println("Subsystem A operation");
- }
- }
-
- public class ConcreteSubsystemB implements SubsystemB {
- @Override
- public void operationB() {
- System.out.println("Subsystem B operation");
- }
- }
-
- public class ConcreteSubsystemC implements SubsystemC {
- @Override
- public void operationC() {
- System.out.println("Subsystem C operation");
- }
- }
- 接下来,创建外观类,它包含了对子系统中各个组件的引用,并提供了简化后的接口:
- public class Facade {
- private SubsystemA subsystemA;
- private SubsystemB subsystemB;
- private SubsystemC subsystemC;
-
- public Facade() {
- subsystemA = new ConcreteSubsystemA();
- subsystemB = new ConcreteSubsystemB();
- subsystemC = new ConcreteSubsystemC();
- }
-
- // 客户端调用的简单接口
- public void operation() {
- subsystemA.operationA();
- subsystemB.operationB();
- subsystemC.operationC();
- }
-
- //TODO 客户机调用的接口可以根据不同的情况,对子系统的方法进行组合
- }
- 最后,创建客户端代码来演示如何使用外观类:
- public class FacadePatternExample {
- public static void main(String[] args) {
- Facade facade = new Facade();
-
- // 客户端通过外观类来调用子系统操作
- facade.operation();
- }
- }