【问题标题】:What's the risk if using too many singletons and static methods in OOP?如果在 OOP 中使用过多的单例和静态方法有什么风险?
【发布时间】:2015-08-02 13:17:48
【问题描述】:

我已经编写 OOP 程序快两年了。但是最近我发现我总是喜欢在我的 OOP 项目中使用太多的单例和静态方法。

例如,为了解耦代码,我想使用 MVC 或类似 3 层架构的东西。我通常使用模型来临时存储信息,例如用户的登录令牌或他或她的个人资料。我发现在大多数情况下,我只需要一个模型类的实例。 所以我几乎所有的模型都是用 Singleton 风格写的。

而且在业务逻辑层或控制器中,我几乎找不到使用多个实例调用同一个方法的情况,除了多线程的原因。这导致我的大部分 BLL 都是由静态方法或类构造的!

我知道这个问题很抽象,对于 StackOverflow 来说并不是一个好问题。但我自己对此感到非常困惑。我认为这种编码风格并不是真正的OOP风格,但是我找不到更好的方法来解决上面的这些逻辑问题。

【问题讨论】:

  • 你听说过依赖注入吗?
  • 也许我不应该告诉你我一直在编写一个一切都是静态的应用程序?
  • @Jamie 一切都好吗?你的意思是这只是关于优雅而不是效率的事情吗?
  • @MarkoTopolnik 我从一本设计模式书中读到了这些东西。我以为它不常用。你介意为我揭示它的本质吗:)
  • 它不仅常用,而且是任何大型应用程序的精髓。这意味着没有静态工厂和实例化单例的显式代码。

标签: java c# objective-c oop


【解决方案1】:

使用单例只有一个很好的理由。当 必须只有一个类的实例时。我的意思是,它不能是多个实例。

例子:

  • 您的记录器。您打开一个文件来保存数据。如果调用其他实例。你会有几个日志文件...

  • 将东西发送到打印机的类。您需要打开打印机的驱动程序。如果您创建其中两个,则尝试打开两次驱动程序时会出错。

如果您只创建一个类的实例,这意味着您不需要更多 TODAY。不要自动约束自己。

使用为其他目的创建的模式是一个糟糕的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多