Appearance

外观(门面)

coderzhouyu2023/10/4

什么是外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。用更简单的话来说,外观模式就是封装多个子系统的复杂操作,提供一个更简单的接口对外来讲访问这一个接口就好了。

外观模式的使用场景有哪些

外观模式的使用场景有以下两个:

  1. 当你需要为一个复杂子系统提供一个简单接口时,可以使用外观模式。这种情况下,你可以让外观类将客户端与子系统的内部复杂性分隔开来。
  2. 当你需要将客户端与多个子系统之间的依赖关系解耦时,可以使用外观模式。这种情况下,客户端可以通过外观接口来间接调用子系统的功能。

总结来讲就是当你需要将一堆复杂的接口封装成一个简单的接口时,可以使用外观模式。

外观模式的优缺点

优点: 它对客户端和子系统之间的松耦合关系。客户端和子系统之间只是简单的交互,不涉及到具体的实现。 缺点:

  1. 门面模式最大的缺点就是不符合开闭原则(对修改关闭,对扩展开放)
  2. 它并不限制客户端直接使用子系统类。如果对客户端访问子系统类做限制,可以使用代理模式。

外观模式的实现

外观模式的实现比较简单,只需要创建一个外观类,将子系统的接口封装起来,然后在外观类中实现这些接口即可。下面是一个外观模式的示例代码:

// 子系统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();
    }
}
Last Updated 2023/10/18 09:39:14