外观模式(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();
}
}