我使用枚举方法实现了 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();
感谢。
答案 0 :(得分:1)
要分离业务逻辑,您应该使用object composition。
enum TransactionHelper implements ISerialize {
Instance(new SerializeImpl());
private int serializePreFixCount = 1;
private final ISerialize delegate;
/**
* Constructor
*/
TransactionHelper(ISerialize delegate) {
this.delegate = delegate;
}
/**
* This method serializes transaction on Disk.
*/
@Override
public void serializeOnDisk() {
delegate.serializeOnDisk();
}
/**
* This method serializes transaction on network stream.
*/
@Override
public void serializeOnNetwork() {
delegate.serializeOnNetwork();
}
}
现在您可以将所有序列化逻辑放在SerializeImpl
类中。
另外,如果你不介意改变
中的用法,你可以使用一个类来代替枚举TransactionHelper.Instance.serializeOnNetwork();
TransactionHelper.Instance.serializeOnDisk();
到
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();
}
}
希望这有帮助。