java - 针对特定操作的动态对象与单例

标签 java singleton

我想知道这样的设计是对还是错,或者两者兼而有之。
我有一个包含多个组件(对象)的应用程序,每个组件都有一个配置(标志、功能等) 任何时候,我都想从对象中检索配置。
为此,我这样做了:

class ConfigRetriever {
    public String getConfigString() {
        String configString = "";   
        configString += "component 1 flag : "+component1.getFlag()+"\n";
        configString += "component 2 flag : "+component2.getFlag()+"\n";
        // ...
        return( configString );
    }
}

在其他地方,当需要配置时:

class SomeClass {
    public void someMethod() {
        ConfigRetriever configRetriever = new ConfigRetriever(); 
        String configString = configRetriever.getConfigString();
            // Do some stuff with configString...
    }
}

我在对象编程方面还很陌生,但仅为一个特定操作创建一个对象(ConfigRetriever)仍然感觉很奇怪(即使该对象能够执行其他操作)。
我也考虑过单例模式,有这样的东西:

String configString = ConfigRetriever.getInstance().getConfigString();

这是一条简洁的线,但由于该对象一直保留在内存中直到应用程序结束,所以我真的不知道什么是对的,什么是错的。

我的设计可以更好吗?如何 ?为什么?

更新
谢谢您的回答。我认为我的问题有点困惑,我没有捕获我的要求。
整个配置和组件的故事在这里作为我正在处理的情况的一个例子。这是快速而肮脏的代码,我应该警告你这一点。真正的问题是:“只创建一次(或有时)对象来访问其方法之一是否合适?” 好吧,阅读你的答案并再次思考一下,似乎正确的答案是“这取决于你的目标、类(class)、职责等等......”
我想在我的对象中存储信息吗?不能是静态方法。
使用永久内存的单例是否有问题?大多数时候是这样,因为我认为你必须有一个充分的理由来维护内存中具有全局状态的对象。所以,大多数时候:没有单例。

最后,创建一个用于实例化对象的类是否有问题?不是这样的,加油吧! :-)

最佳答案

我认为这里没有必要有一个单例。

为单个操作创建对象并不奇怪,但如果频繁调用该方法可能效率不高。我认为你能做的最好的就是使用 dependency injection :

class SomeClass {
    private final ConfigRetriever retriever;
    public SomeClass(ConfigRetriever retriever) {
        this.retriever = retriever;
    }
    public void someMethod() {
        // use this.retriever here
    }
}

关于java - 针对特定操作的动态对象与单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644301/

相关文章:

java - 学习Spring之前我应该​​知道什么?

java - Arrays$ArrayList 无法在 java 中转换为 java.util.ArrayList

C# - 两种形式的相同控制?

java - 分布式环境下如何实现Spring bean单例?

java - 是否有 Swing hack 来查询或设置窗口的 Z 顺序?

java - 如何使用java变量向mysql插入值

ios - 具有返回类型类对象的方法

android - kotlin 中的 "object"是否被垃圾收集

java - 使用 Java 和 Google Drive API V3 将文件上传到共享的 Google 云端硬盘位置?

c# - 抽象类单例 C#