试图弄清楚这段代码是否通过使用Singleton带来了任何好处
本文关键字:Singleton 任何好 来了 是否 弄清楚 段代码 代码 | 更新日期: 2023-09-27 18:19:47
我正在做一个项目,其中一个联合开发人员(以及以前的开发人员)对类的几乎每一个页面都使用Singleton/Ffacade,其中有很多方法调用,但实际上并没有维护数据。
例如:
public class FooFacade
{
private static FooFacade m_facade = null;
private static DataAccessManager m_dataAccessMgr = null;
public StringBuilder Status {get; set; }
private FooFacade()
{
this.Status = new StringBuilder();
}
public static FooFacade getInstance()
{
if (m_facade == null)
{
m_dataAccessMgr = DataAccessManager.getInstance();
m_facade = new FooFacade();
}
return m_facade;
}
public void clearStatus()
{
this.Status.Remove(0, Status.Length);
}
public void Method1(string value1, int value2)
{
// DO SOMETHING
}
public List<string> Method2(string value1, int value2)
{
// DO SOMETHING ELSE
// RETURN LIST
}
现在,我对命名约定有一些问题,他们把Singelton和Facade放在同一个类中,Facade并不是真正的Facade。(但那是完全不同的对话)。
所以我的问题是,这是否真的有好处。开发人员可以解释的最好的一点是,它更适合内存管理,因为您不需要不断地创建和处理对象。
我们的应用程序不是企业级应用程序,内存也没有问题。任何时候网站都很慢,这实际上是因为数据库而不是代码。
谢谢你的帮助。我是一个开发人员,喜欢知道为什么要让自己成为一个更好的开发人员。既然我无法用有意义的语言从开发人员那里得到它,我就联系你们。
谢谢,乍得
更新感谢下面的评论,我知道这个状态是一个严重的问题,因为它有可能成为一个巨大的安全漏洞。在内存管理、速度等方面,在Singleton中使用这些代码有什么好处吗?或者,每次需要时实例化FooFacade会更容易吗?
因为您的对象有一个内部状态(Status
),所以您在找麻烦。具体来说,如果在多个线程中使用singleton(例如在web应用程序中),则代码可能无法工作。
只有当您的类没有内部状态时,才使用singleton。
在内存管理、速度等方面,在Singleton中使用这些代码有什么好处吗?或者在每次需要的时候实例化FooFacade会更容易吗?
此类型的实例包含的所有内容都是对StringBuilder
的引用。此外,当创建一个新实例时,不会有什么繁重的工作要做(除非DataAccessManager.getInstance()
在幕后做了一些令人讨厌的事情)。所以,在内存管理、速度等方面没有明显的好处。我只会在需要的时候实例化一个新实例。(或者更确切地说:我会尝试完全去掉这个类…)
我会将singleton模式保存为必须作为singleton存在的东西,例如在多个使用者之间共享的特定文件。Singleton通常涉及隔离线程问题。然而,如果您有一个不包含状态并且使用singleton模式实现的类,那么您已经实现了一个很容易成为反模式的实用程序类。虽然这不是一个好主意,但作为一个具有静态方法的静态类,它会更具性能。静态方法在调用该方法之前不需要进行null检查。但正如我在一开始所说的,对于必须是singleton的事物,请保留singleton模式。