代码之家  ›  专栏  ›  技术社区  ›  Alex KeySmith

工厂模式是否应该用于禁用功能?

  •  1
  • Alex KeySmith  · 技术社区  · 13 年前

    当我想禁用应用程序中的功能时,我正试图了解工厂模式的用法。

    如果在配置中禁用了我的应用程序中的日志记录:

    记录器工厂是否应该传回记录器的一个实例,该实例是一个虚拟的,不起任何作用?因此,使用记录器的任何代码都不需要更改。

    或者,如果在配置中禁用了记录器,则不使用记录器是使用记录器的代码的责任吗?

    谢谢你的帮助。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Björn Pollex    13 年前

    如果您有许多不同的日志类(例如log to file和log to network),那么我认为在禁用日志时返回一个虚拟日志是最简单和最灵活的解决方案。它不需要更改使用记录器的代码,也不需要更改其他记录器。

    让记录器的用户负责的想法是不好的,因为这会在整个代码中传播禁用日志记录的特性,从而污染应用程序逻辑。

        2
  •  2
  •   Flinsch    13 年前

    IMHO,这不是工厂模式的原则问题。这更多的是关于你的编码风格的设计等问题,但是,只是提供一个关于你的conrete问题的答案:它将更容易,更直观,更灵活(1)返回一个对象作为一个“空”logger类的实例 (2) 检查常规记录器类中的日志记录禁用标志。

        3
  •  1
  •   djna    13 年前

    至于是使用一个伪禁用的记录器,还是只使用一个知道它被禁用的stadanrd记录器,这不太明显。实际上,我怀疑我们将倾向于发现部分启用是最常见的场景——当大多数被禁用时,一些目的地或消息类将倾向于被发出。所以我可能会认为这是记录器的自然工作,以了解它的配置。

    只有当这使日志实现变得非常容易并且是一个常见的使用场景时,我才会使用dummy。