前言
大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!
一、定义
外观模式提供了一个统一的接口,用来访向子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
二、类图
三、应用
3.1 需求
模拟一个子系统通过上层外观类被外界调用,要注意,我们虽然提供了外界交互的接口,但如果用户想继续使用原来的系统,也是可以的。我们不会改变原来代码。
3.2 分析
3.3 实现
下面是一个简单的外观模式的示例代码:
首先,我们定义一个子系统,包含了一些需要被使用的接口和实现:
public class SubsystemA {
public void methodA() {
System.out.println("SubsystemA: methodA");
}
}
public class SubsystemB {
public void methodB() {
System.out.println("SubsystemB: methodB");
}
}
public class SubsystemC {
public void methodC() {
System.out.println("SubsystemC: methodC");
}
}
然后,我们定义一个外观类,用来隐藏子系统的复杂性,并提供简单的接口给客户端使用:
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 operation1() {
System.out.println("Facade: operation1");
subsystemA.methodA();
subsystemB.methodB();
}
public void operation2() {
System.out.println("Facade: operation2");
subsystemB.methodB();
subsystemC.methodC();
}
}
最后,我们可以在客户端使用外观类来访问子系统的接口:
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.operation1();
facade.operation2();
}
}
输出:
Facade: operation1
SubsystemA: methodA
SubsystemB: methodB
Facade: operation2
SubsystemB: methodB
SubsystemC: methodC
可以看到,客户端只需要通过外观类来访问子系统的接口,而不需要了解子系统的复杂实现。同时,外观类还可以对子系统的接口进行组合和封装,提供更加简单和方便的接口给客户端使用。
四、问题
外观模式在哪些地方用到了?
五、总结
以上就是今天要讲的内容,本文介绍了设计模式中的外观模式,该模式为系统内部提供统一的接口,方便外界调用