首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Singleton的JSONObject

使用Singleton的JSONObject
EN

Stack Overflow用户
提问于 2017-09-13 10:26:49
回答 4查看 1.9K关注 0票数 1

在我的项目中,我使用JSON对象向客户端发送响应。

我的JSONObject

代码语言:javascript
运行
复制
JSONObject jsonObj = new JSONObject();

每次我使用new关键字创建json对象时。我不想使用new关键字创建。为此,我可以为此实现Singleton pattern吗?

我的Singletone类代码:

代码语言:javascript
运行
复制
public class SingletonInstance {


        private static SingletonInstance instance = new SingletonInstance ();


        private SingletonUmtInstance() {

        }

        // Get the only object available
        public static JSONObject getInstance() {

            if (instance == null) {
                instance = new JSONObject();
                return instance;
            } else {
                return instance;
            }

        }
}

要创建一个实例,我将使用:

代码语言:javascript
运行
复制
JSONObject DBCon = SingletonInstance.getInstance();

这是正确的方式吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-13 10:34:11

Singleton设计模式限制实例化,并确保JVM中只存在类的一个实例。

换句话说,在实现Singleton时,目的是确保每次调用getInstance()方法时都使用完全相同的实例。

对于您的代码,条件if (instance == null)是无用的,您的getInstance()方法相当于:

代码语言:javascript
运行
复制
public static JSONObject getInstance() {
      return instance;
}
票数 2
EN

Stack Overflow用户

发布于 2017-09-13 11:17:06

在将方法从创建新对象更改为单例或静态方法之前,请确保应用程序不在多线程环境中使用。

您将把json字符串传递给JSONObject构造函数,这意味着它持有状态。将其更改为单例或静态会导致多线程环境中的数据不一致。

对单例实现使用枚举。

票数 1
EN

Stack Overflow用户

发布于 2017-09-13 11:52:08

示例代码片段:

代码语言:javascript
运行
复制
public enum SingletonEnum {

    INSTANCE; 

    public static JSONObject getJsonObject() {        
        return new JSONObject();    
    }
}

使实例使用

代码语言:javascript
运行
复制
SingletonEnum singleton = SingletonEnum.INSTANCE;

使用object类中的hashcode方法确保它保持不变,而不管它被调用的次数是'n‘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46195065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档