试图弄清楚这段代码是否通过使用单例带来了任何好处

2024-01-01

我正在开发一个项目,其中一位共同开发人员(和以前的开发人员)对类的几乎每个页面都使用 Singleton/Facade,其中有很多方法调用,但实际上并没有维护数据。

例如:

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。 (但那是完全不同的对话)。

所以我的问题是这是否真的有好处。开发人员可以解释的最好的情况是,它更有利于内存管理,因为您不需要不断地创建和处置对象。

我们的应用程序不是企业级应用程序,我们不存在内存问题。每当网站速度缓慢时,实际上都是数据库而不是代码造成的。

感谢您的帮助。我是一名开发人员,喜欢知道为什么要让自己成为更好的开发人员。由于我无法从开发人员那里得到有意义的信息,所以我正在与你们联系。

谢谢, 乍得

UPDATED感谢下面的评论,我知道这个状态是一个严重的问题,因为它有可能成为一个巨大的安全缺陷。在内存管理、速度等方面,在单例中使用此代码有什么好处吗?或者每次需要时实例化 FooFacade 会更容易吗?


因为你的对象有一个内部状态(Status)你是在自找麻烦。具体来说,如果在多个线程中(例如在 Web 应用程序中)使用单例,则代码可能无法工作。

仅当您的类没有内部状态时才使用单例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

试图弄清楚这段代码是否通过使用单例带来了任何好处 的相关文章

随机推荐

  • 如何从 Pharo 中的调试器复制堆栈跟踪?

    如何从 Pharo 中的调试器复制堆栈跟踪 我知道图像附近有 Debug log 文件 但我太懒了 无法从 Pharo 导航到文件系统 找到文件夹 并浏览一个巨大的文本文件 如果前面有堆栈跟踪 我的 我知道一个方法 但不是最好的 当您在调试
  • 编译器可以优化对常量参数的引用到常量值吗?

    考虑以下功能 void func const char input do something 显然 参数为常量值是有意义的 而不是 关于 char 类型大小的常量引用 现在编译器可以将其优化为常量 值 以便它与以下相同 void func
  • 在 C++ 中向 Float/Double 类型添加 0

    我听说像 0 1 0 2 这样的浮点运算可能会由于内部使用二进制浮点而产生像 0 30000000000000004 这样的舍入误差 但是 如果我在 C 中向任何浮点数添加 0 是否能保证产生相同的值而没有任何舍入误差 我不知道浮点运算是如
  • 轻量级、便携式 C++ 光纤,MIT 许可证

    我想获得一个具有 MIT 许可证 或更宽松 的轻量级 便携式光纤库 Boost Coroutine 不符合资格 不是轻量级 Portable Coroutine Library 和 Kent C CSP 均为 GPL 也不符合资格 编辑 你
  • tkinter 使用主窗口调整框架和内容的大小

    我正在尝试弄清楚如何控制包含框架的窗口的大小调整 在代码中 我在顶部有三个按钮 它们应该保持在原来的位置 当我拖动窗口将其展开时 我希望框架及其包含的文本框随主窗口一起展开 我读过columnconfigure and rowconfigu
  • 根据覆盖率报告删除未使用的 JavaScript 代码

    有一个很大的 javascript 库 约 40 000 行代码 和一个使用少于50 图书馆的代码 有一个测试利用库中的所有所需功能并可以生成覆盖率报告 如何以编程方式删除依赖于测试的每行未使用的代码 Note 覆盖率报告包含已执行的行的索
  • React Native Expo 更改默认 LAN IP

    我已经安装了虚拟盒子 当我查看主机 gt LAN gt ip地址时 是exp 192 168 56 1 19000 如何在不禁用网络的情况下更改它 因为这是我的 virtualbox IP 而我的设备无法连接到它 Thanks 您可以指定R
  • 在 WooCommerce 我的帐户上添加付款订单按钮查看待处理订单的订单

    当订单状态为时如何创建 为此订单付款 按钮pending查看订单时显示在我的帐户页面上 链接结构如下 https url com checkout order pay XXXXX pay for order true key wc orde
  • “与命名卷不同,绑定安装不会自动将容器内容复制到主机”

    需要澄清评论here https stackoverflow com questions 36387032 how to set a path on host for a named volume in docker compose yml
  • 设置 SourceTree 将 unity3d 场景与 UnityYAMLMerge 合并

    所以我按照以下指示进行操作here http docs unity3d com Manual SmartMerge html并尝试为统一的场景建立合并 有关 SourceTree 的说明就在底部 我添加了 unity 提供的合并工具作为自定
  • pyspark 1.6 中 pandas 分位数和 cut 的替代方法有哪些

    我是 pyspark 的新手 我有如下的熊猫代码 bindt df df var notnull var quantile 0 1 2 3 4 5 6 7 8 9 1 unique df 0 quartile format var pd c
  • 在 Google Map API 上显示每个航点图钉的标签

    我正在尝试为路线上的每个航路点添加标签 但我不太确定应该如何处理它 经过一些研究后 我了解到您可以添加带有标签的自定义引脚 但那是我手动放置每个引脚的时候 我怎样才能做到这一点以获得指导 如果您想从 DirectionsRenderer 请
  • 使用互操作从 COM 事件处理程序发出错误通知

    我正在使用 c 中的 com 互操作来使用 com 对象 我为对象提供了一个事件处理程序 它在完成任务后调用该事件处理程序 问题就在这里 我在处理程序中有一些健全性检查代码 如果世界状况不佳 它们会抛出异常 comObj OnRequest
  • 将外部库添加到Android Studio时出现非法参数异常

    我在 Eclipse 中创建了四个相互依赖的库 当我将库添加到 Android 项目时 出现以下异常 经过一番排除过程后 我发现是这三个库之一导致了异常 我在另一个 Eclipse 项目中成功使用了这四个库 所以我不认为它们有什么问题 问题
  • 如何使用和激活phonegap蓝牙?

    我已经完成了国际象棋游戏的源代码 现在是 1 人对 1 人通过蓝牙进行的部分 如何通过蓝牙使用 激活和操纵动作 多谢 蓝牙插件 https github com phonegap phonegap plugins tree master A
  • 什么是 PowerShell cmdlet?

    以概念方式处理 cmdlet 它们是如何制作的 它们被编译了吗 它相当于 PowerShell 的批处理文件吗 它是脚本还是二进制文件 用于存储这些 cmdlet 的结构是什么 PowerShell cmdlet 是一段已编译的 NET 代
  • 保存图像叠加层,并在下方使用相机捕获的图像

    我的应用程序有一个 照相亭 功能 允许用户使用相机拍照 同时在相机视图顶部显示叠加图像 拍摄照片后 我需要将用户在拍摄照片时看到的内容保存到文件系统中 我在开发解决方案时遇到了一个大问题 捕获具有兼容尺寸的图像 在其中我可以附加覆盖图像以产
  • 如何以编程方式触发可拖动行为

    我在 jQuery 中创建了一个 2d 滑块 其中通过在边界框中拖动 手柄 来同时操作 2 个参数 我通过在父 div 中嵌套一个 handle div 并使用 jQuery UI 插件来促进拖动行为来实现这一点 html 看起来像 div
  • 如何在 Python 中复制像元组这样的不可变对象?

    copy copy and copy deepcopy 只需复制不可变对象 如元组 的引用即可 如何在不同的内存位置创建第一个不可变对象的重复副本 您正在寻找deepcopy from copy import deepcopy tup 1
  • 试图弄清楚这段代码是否通过使用单例带来了任何好处

    我正在开发一个项目 其中一位共同开发人员 和以前的开发人员 对类的几乎每个页面都使用 Singleton Facade 其中有很多方法调用 但实际上并没有维护数据 例如 public class FooFacade private stat