design-patterns - 新类实例 vs 单例类 vs 静态方法

标签 design-patterns

我正在努力为这种情况选择完美的设计模式:

当我单击我的 Swing UI 上的“浏览”按钮时,必须在 Web 浏览器上打开指定的 URL。此功能在此实用程序类中实现,如下所示:

//inside action Listener of the browse button I call the openURL method of the below class

class webBrowserUtility(){
    void openURL(String url){
    ........
    }
}

设计模式方法

方法 1) 我可以继续创建上述类的新实例并调用 openURL()。

方法 2) 单例:使 WebbrowserUtility 类成为单例,并在内存中保留该类的静态实例,以便能够在需要时调用该方法。

方法 3) 静态方法:将 openURL() 方法设为静态并根据需要调用 WebbrowserUtility.openURL(url)。

在我的第一种方法中,我担心它可能效率低下,因为每次单击浏览按钮都会创建 WebBrowserUtility 类的新实例。我对在选择 2) 和 3) 之间适应哪种方法感到困惑。你能帮我在这三种设计模式中为这个场景选择最好的吗?或者是否有更好的设计模式可以适应相同的情况?

最佳答案

首先,我建议您不要过度担心现阶段出现性能/效率问题的可能性,除非您有具体的理由相信这会是一个问题。等等,看看它是否真的是一个问题,然后相应地解决它。但是你可能会发现没有什么可担心的。

那么,问题是,您的 WebBrowserUtility 是否使用了您的类的任何非静态成员变量(即实例数据)?

  • 如果是,那么您必须使用方法 1. 并且每次都创建一个新实例。
  • 如果不是,那么我倾向于使用静态方法并使 WebBrowserUtility 成为静态类而不是实现单例。你真的不需要只有一个实例,这就是单例模式的用途。静态类解决方案上的静态方法为您提供了所需的简单可访问性。不利的一面是,如果您为此编写单元测试,正确地对静态方法进行单元测试是有问题的。
  • 关于design-patterns - 新类实例 vs 单例类 vs 静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7242297/

    相关文章:

    ios - 添加分析事件以记录项目中每个 ViewController 的名称

    c# - SRP 和很多类(class)

    c# - 在库 api 中使用字符串与类型

    design-patterns - 扩展单例类是错误的吗?

    .net - 什么时候层应该作为单独的部署单元来实现?

    c# - 在已经正常运行的应用程序中的 WPF/C# 中撤消重做

    web-services - 调用 Web 服务时使用服务代理

    c# - DataContext db = new DataContext() - 作为全局

    java - Spring MVC 和安全性 - 授权期间 protected 资源的识别

    c# - MVVM Light Toolkit - Messenger 使用事件聚合器或调解器模式?