java-将业务逻辑与基于枚举的单例类分开

java-将业务逻辑与基于枚举的单例类分开,java,jakarta-ee,enums,Java,Jakarta Ee,Enums,我使用enum方法实现了一个java单例类。下面给出了该类的代码 我的问题是:我如何将业务逻辑从这个单例类中分离出来,或者将创建单例类以外的其他功能分离出来 既然现在我已经将整个类声明为一个枚举,那么我应该将它声明为一个类,然后在其中创建一个枚举属性,还是采取另一种方法 这是我的单身代码 enum TransactionHelper implements ISerialize { Instance; private int serializePreFixCount = 1; /*

我使用enum方法实现了一个java单例类。下面给出了该类的代码

我的问题是:我如何将业务逻辑从这个单例类中分离出来,或者将创建单例类以外的其他功能分离出来

既然现在我已经将整个类声明为一个枚举,那么我应该将它声明为一个类,然后在其中创建一个枚举属性,还是采取另一种方法

这是我的单身代码

enum TransactionHelper implements ISerialize
{
  Instance;

  private int serializePreFixCount = 1;

  /**
   * This method serializes transaction on Disk.
   */
  @Override
  public void serializeOnDisk()
  {
    //some code here

  }

  /**
   * This method serializes transaction on network stream.
   */
  @Override
  public void serializeOnNetwork()
  {
    //some code here
  }

}
当我需要使用这个类时,我就这样使用它

TransactionHelper.Instance.serializeOnNetwork();
TransactionHelper.Instance.serializeOnDisk();

谢谢。

要分离业务逻辑,您应该使用

现在您可以将所有序列化逻辑放入
SerializeImpl
类中。


此外,如果您不介意将用法从更改为

TransactionHelper.Instance.serializeOnNetwork();
TransactionHelper.Instance.serializeOnDisk();

因此,只需将构造函数设为私有,就可以获得单例

class TransactionHelper {

    private TransactionHelper() { }

    private static TransactionHelper getInstance() {
        TransactionHelperHolder.INSTANCE;
    }

    private static class TransactionHelperHolder {
        private static final TransactionHelper INSTANCE = new TransactionHelper();
    }
}

希望这能有所帮助。

“如何将业务逻辑与此单例分离?”-假设它处理单例-您不会!为什么是单身?具体来说,如果foo和bar都有不同的
TransactionHelper
实例,会发生什么?请解释,或给出堆栈跟踪,显示错误。Singleton应只允许您创建一个对象。不管foo和bar是否实例化了它们自己的对象,它们仍然拥有相同的对象。非常感谢。让我在实践中检查一下,然后再联系您我已经实现了它,但存在一个设计问题,如果我将所有序列化逻辑放入SerializeImpl类中,那么我必须将其构造函数公开。这意味着任何其他类都可以实例化该类。但在我的例子中,我不希望任何类调用序列化方法。您可以将其设置为包私有。您自己的包中的类始终可以遵循规则。否则,您不应该完全委托,而应该将所有内容都放在同一个类中。
TransactionHelper.getInstance().serializeOnNetwork();
TransactionHelper.getInstance().serializeOnDisk();
class TransactionHelper {

    private TransactionHelper() { }

    private static TransactionHelper getInstance() {
        TransactionHelperHolder.INSTANCE;
    }

    private static class TransactionHelperHolder {
        private static final TransactionHelper INSTANCE = new TransactionHelper();
    }
}