gpt4 book ai didi

oop - 面向对象编程中的外观

转载 作者:行者123 更新时间:2023-12-02 08:09:20 25 4
gpt4 key购买 nike

在 OOP 中,Facade 应该是一个对象还是只是一个?哪个更好?

Wikipedia 中的大部分示例将 Facade 创建为一个对象,该对象应在使用前实例化。

CarFacade cf = new CarFacade();
cf.start();

能不能设计成这样呢?

CarFacade.start();

更新

Facade 可以促进单例吗?

最佳答案

立面

  • 代表复杂子系统(模块)的高级 API。
  • 减少客户端代码依赖性。

    这意味着您的客户端代码仅使用外观并对该外观背后的类没有太多依赖性。

最好使用接口(interface)的实例,因为

  • 您可以替换它进行测试。例如。模拟外观所代表的子系统。
  • 您可以在运行时替换它。

当您使用静态方法时,您的客户端代码会在编译时绑定(bind)到该方法的实现。这通常与 open/close principle 相反.

我说的是“通常是相反的”,因为有使用静态方法的例子,但是系统还是开放扩展的。例如

  • ServiceLoader

    静态加载方法只扫描类路径和查找服务实现。因此,将类和 META-INF/services 描述添加到类路径将添加其他可用服务,而无需更改 ServiceLoader 的代码。

  • 例如,Spring 的 AuthenticationFacade 在内部使用了一个 ThreadLocal。这使得替换 AuthenticationFacade 的行为成为可能。因此它也可以扩展。

最后,我认为最好使用实例和接口(interface),就像我将用于大多数其他类一样。

关于oop - 面向对象编程中的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com