外观(门面)
coderzhouyu2023/10/4
什么是外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。用更简单的话来说,外观模式就是封装多个子系统的复杂操作,提供一个更简单的接口对外来讲访问这一个接口就好了。
外观模式的使用场景有哪些
外观模式的使用场景有以下两个:
- 当你需要为一个复杂子系统提供一个简单接口时,可以使用外观模式。这种情况下,你可以让外观类将客户端与子系统的内部复杂性分隔开来。
- 当你需要将客户端与多个子系统之间的依赖关系解耦时,可以使用外观模式。这种情况下,客户端可以通过外观接口来间接调用子系统的功能。
总结来讲就是当你需要将一堆复杂的接口封装成一个简单的接口时,可以使用外观模式。
外观模式的优缺点
优点: 它对客户端和子系统之间的松耦合关系。客户端和子系统之间只是简单的交互,不涉及到具体的实现。 缺点:
- 门面模式最大的缺点就是不符合开闭原则(对修改关闭,对扩展开放)
- 它并不限制客户端直接使用子系统类。如果对客户端访问子系统类做限制,可以使用代理模式。
外观模式的实现
外观模式的实现比较简单,只需要创建一个外观类,将子系统的接口封装起来,然后在外观类中实现这些接口即可。下面是一个外观模式的示例代码:
// 子系统1 接口
interface SubSystem {
void doSomething();
}
// 子系统1实现类
class SubSystemImpl implements SubSystem {
@Override
public void doSomething() {
System.out.println("SubSystemImpl doSomething");
}
}
// 子系统2 接口
interface SubSystem2 {
void doSomething();
}
// 子系统2实现类
class SubSystem2Impl implements SubSystem2 {
@Override
public void doSomething() {
System.out.println("SubSystem2Impl doSomething");
}
}
// 外观类
class Facade {
private SubSystem subSystem = new SubSystemImpl();
private SubSystem2 subSystem2 = new SubSystem2Impl();
// 外观类将子系统的接口封装起来,然后在外观类中实现这些接口
public void doSomething() {
subSystem.doSomething();
}
public void doSomething2() {
subSystem2.doSomething();
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doSomething();
facade.doSomething2();
}
}