最佳实践创建新对象或返回相同对象

时间:2016-02-26 19:46:48

标签: java oop hazelcast

我想创建一个返回对象的Factory,这个对象可以用来与缓存系统进行交互。

哪种方式更好?每次返回一个新对象或每次只使用相同的对象。

Factory getInstance(Type type){
  switch(type){
    case 1 : return A();
    case 2 : return B();

  }
}

或返回相同的对象

class Factory {    
  private static A a = new A();;
  private static B b = new B();


Factory getInstance(Type type){
      switch(type){
        case 1 : a;
        case 2 : b;
      }
    }
}

A或B的重新调整对象具有非静态方法,这些方法将使用单个静态实例访问Hazelcast服务器。

3 个答案:

答案 0 :(得分:0)

如果你确定A和B都不带状态并且是真正的线程保存,那么重用同一个实例可能是一个很好的优化。遵循工厂模式的一个很好的例子是你最好的选择:

http://www.tutorialspoint.com/design_pattern/factory_pattern.htm

常见的实现方法是创建一个单件工厂。如果搜索它,您可以轻松看到这个示例。这是一个体面的:

http://www.java2s.com/Tutorial/Java/0460__Design-Pattern/SingletonFactory.htm

答案 1 :(得分:0)

一般原则是KISS

所以,

  1. 除非确实需要,否则不要重复使用相同的对象(例如,您的表现真的慢,并且您已根据分析结果做出此决定)。执行可重用的存在对象,您需要自己管理它们的实例(使用对象池等)。
  2. 尝试创建不可变的对象,除非有重要原因。使对象变得可变,会给代码增加额外的复杂性。因此,增加了添加错误的可能性。
  3. 结论:我宁愿使用没有Factory变量的第一个解决方案。至少作为初始工厂实施。

答案 2 :(得分:0)

不要重新发明轮子,使用DI库。有一个用于做这些事情的图书馆,Spring是最知名的。他们可以为您生成工厂和管理bean。

这可能因为这种需要而无法胜任,但我很惊讶你不需要所有的应用程序。