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

时间:2010-10-29 08:43:22

标签: design-patterns factory-pattern

当我希望禁用应用程序中的功能时,我正试图了解工厂模式的使用情况。

让我们说例如我有一个名为LoggerFactory的工厂,它创建了一个记录器实例。

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

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

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

或者,如果记录器被禁用,它是否有责任不做任何事情?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果您有许多不同的记录器类(例如,记录到文件并登录到网络),那么我认为在禁用记录时返回虚拟记录器是最简单和最灵活的解决方案。它不需要更改使用记录器的代码,也不需要更改其他记录器。

让记录器的用户负责的想法很糟糕,因为这会传播禁用整个代码记录的功能,从而污染应用程序逻辑。

答案 1 :(得分:2)

恕我直言,这不是关于工厂模式原则的问题。这是一个关于编码风格等设计的问题。但是,只是为了提供一个关于你的混淆问题的答案:它会更简单,更直观,更灵活(1)将一个对象作为一个“空”的实例返回记录器类(2)检查常规记录器类中的logging-disabled-flag。

答案 2 :(得分:1)

使用记录器的代码不应该包含在启用/禁用条件中。

关于是否使用Dummy禁用记录器或只是知道它被禁用的stadanrd记录器不太明显。实际上我怀疑我们会发现部分启用是最常见的情况 - 当大多数禁用时,一些目的地或消息类将倾向于发出。因此,我可能会将此视为记录器的自然工作,以了解它的配置要做什么。

如果这使得记录器实现变得非常容易并且这是一种常见的使用场景,我会选择假人。