设计模式-外观模式

发布时间:2024年01月18日

外观模式:

? ? ?外观模式(Facade Pattern)是属于结构型的设计模式,它的主要目的是为子系统中的一组接口提供一个统一且更简单的接口,还简化了客户端调用子系统功能的过程。

角色和结构:

1 Facade(外观类)

  • Facade 类提供了对子系统的简洁、一致的接口。它包含了子系统中的多个模块或组件的方法,并在内部协调这些方法的调用。
  • 客户端通常只与 Facade 类交互,而不是直接与子系统内的各个类交互。

2 Subsystem Classes(子系统类)

  • 子系统包含了一系列相关的类,它们共同实现了一组功能。这些类可能有复杂的依赖关系,或者客户端直接调用会比较复杂。
  • 子系统类不直接与 Facade 类通信,而是由 Facade 在需要时调用它们。

工作原理:

  • Facade 为子系统定义了接口,它封装了子系统中的复杂性,对外提供简单易用的功能。
  • 当客户端通过 Facade 调用某个功能时,Facade 负责处理请求,包括协调子系统中的多个对象执行操作,转换和传递数据等。

示例代码:

外观模式示例代码如下:

// 子系统类
class SubsystemA {
    public void operationA() {
        // 实现子系统A的操作...
    }
}

class SubsystemB {
    public void operationB() {
        // 实现子系统B的操作...
    }
}

class SubsystemC {
    public void operationC() {
        // 实现子系统C的操作...
    }
}

// 外观类
class Facade {
    private SubsystemA a;
    private SubsystemB b;
    private SubsystemC c;

    public Facade() {
        this.a = new SubsystemA();
        this.b = new SubsystemB();
        this.c = new SubsystemC();
    }

    public void performComplexOperation() {
        // 协调并执行子系统的方法
        a.operationA();
        b.operationB();
        c.operationC();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();

        // 客户端只需要调用 Facade 提供的简单方法即可完成复杂的任务
        facade.performComplexOperation();
    }
}

说明:在上面代码中SubsystemASubsystemB?和?SubsystemC?是子系统中的类,而?Facade?类负责整合它们的功能并通过?performComplexOperation()?方法提供给客户端简单直观的调用方式。

外观模式的优点:

  • 降低复杂性:隐藏了子系统的复杂性,使客户端不用了解子系统的实现细节。
  • 减少耦合:客户端只需与 Facade 类进行交互,减少了客户端与子系统间的耦合度。
  • 提高灵活性:修改子系统内部实现时,只要 Facade 的接口保持不变,就不会影响到使用 Facade 的客户端代码。

外观模式的应用场景:

  • 对于复杂功能的简化访问,例如复杂的操作系统的api或者第三方API等。
  • 当需要向原有系统扩展时,只增加新接口以适应新的需求时。

?

文章来源:https://blog.csdn.net/qyhua/article/details/135685510
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。