缓存我以前创建的对象

时间:2014-10-30 06:53:44

标签: java

我是Java的新手,我有这样的场景。我有一个名为createObject的方法,如下所示:

public MyInterface createObject(EnumData data){
 //creates many objects of the classes implements MyInterface interface
 switch(data)
 {
     case AppObject:
         return new AppObject();
     case TestObject:
         return new TestObject();
 }
}

我希望我想缓存这些对象。因为方法createObject多次调用,所以我希望每次都不要创建对象,而是重新使用已经创建的对象。

注意:

我不在这里寻找Singleton,因为那不适合我的用例。相反,因为这个方法创建了大量的对象,我只希望这种方法可以重用它们。

提前致谢。

5 个答案:

答案 0 :(得分:0)

尝试使用密钥HashMap存储到data并为已创建的类值。如果首先调用该方法,请检查具有此类型的类是否已在HashMap中。

答案 1 :(得分:0)

在构造函数中创建对象并将它们存储在私有变量

private AppObject appObject;
private TestObject testObject;

public MyConstructor() {
    this.appObject = new AppObject();
    this.testObject = new TestObject();
}

public MyInterface createObject(EnumData data){
 //creates many objects of the classes implements MyInterface interface
 switch(data)
 {
     case AppObject:
         return this.appObject;
     case TestObject:
         return this.testObject
 }
}

答案 2 :(得分:0)

如果你想要的只是创建一个对象,并且每次调用createObject时都返回它,你应该只在createObject中存在的同一个类中创建一个字段:

private AppObject yourAppObject = new AppObject();
private TestObject testObject = new TestObject();

然后createObject可能如下所示:

public MyInterface createObject(EnumData data){
//creates many objects of the classes implements MyInterface interface
    switch(data)
    {
        case AppObject:
            return yourAppObject();
        case TestObject:
            return yourTestObject();
    }
}

这是你的意思吗?

答案 3 :(得分:0)

假设您在应用程序的生命周期中需要相同的对象:

enum EnumData {
    APP_OBJECT(new AppObject()), TEST_OBJECT(new TestObject());

    private final MyInterface obj;

    private EnumData(final MyInterface obj) {
        this.obj = obj;
    }

    public MyInterface getObject() {
        return obj;
    }
}

用法:

public MyInterface createObject(final EnumData data){
    return data.getObject();
}

答案 4 :(得分:0)

有几种方法可以做到这一点,最简单的方法是定义包含实例的类字段。

另一种方法是创建一个abstract factory来创建和缓存您的实例。