Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';在OOP中使用过多的单例和静态方法会有什么风险?_Java_C#_Objective C_Oop - Fatal编程技术网

Java 什么';在OOP中使用过多的单例和静态方法会有什么风险?

Java 什么';在OOP中使用过多的单例和静态方法会有什么风险?,java,c#,objective-c,oop,Java,C#,Objective C,Oop,我写OOP程序已经快两年了。但最近我发现我总是喜欢在我的OOP项目中使用太多的单例和静态方法 例如,为了解耦代码,我想使用MVC或类似于3层架构的东西。我通常使用模型来临时存储信息,例如用户的登录令牌或其个人资料。我发现在大多数情况下,我只需要一个模型类的实例。 因此,我的几乎所有模型都是以单件风格编写的 在业务逻辑层或控制器中,我几乎找不到使用多实例调用同一方法的情况,除了多线程原因。这导致我的大多数BLL都是由静态方法或类构造的 我知道这个问题很抽象,对StackOverflow来说不是一个

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

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

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


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

使用单例只有一个很好的理由。当需要类只有一个实例时。我的意思是,这只能是一个例子

示例:

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

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

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


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

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