如何使用“单元素枚举类型”使这个类成为单例?

时间:2015-01-09 14:05:50

标签: java enums

我有这个课程,我用这种方式作为单身人士:

FlagOfficer.instance().someVariable

以下是该类的当前实现:

public class FlagOfficer {

    public FlagOfficer() {

    }

    static FlagOfficer flagOfficer = null;

    public static FlagOfficer instance() {
        if (flagOfficer == null) {
            flagOfficer = new FlagOfficer();
        }
        return flagOfficer;
    }

    public boolean getLastBackupDate;
    public boolean syncProcessStartedOnce;
}

我现在正在阅读" Effective Java"他们说实现单例模式的最佳方法是使用单元素枚举类型

以下是本书的一个示例:

public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}

那么如何转换我的类以便它使用这种模式呢?我之后如何使用它?

1 个答案:

答案 0 :(得分:10)

public enum FlagOfficer {
    // Enum instances/values should be declared first.
    // Use INSTANCE(arg1, ..) if constructor accepts agruments.
    INSTANCE; 

    // Constructor can accept arguments as well.
    private FlagOfficer() {

    }

    private Date lastBackupDate;
    private boolean syncProcessStartedOnce;

    public Date getLastBackupDate() {
        return lastBackupDate;
    }

    public boolean isSyncProcessStartedOnce() {
        return syncProcessStartedOnce;
    }
 }

用法:

FlagOfficer fo = FlagOfficer.INSTANCE;