簡體   English   中英

如何重用Singleton模式?

[英]How to reuse Singleton pattern?

當我想通過使用Java語言中的繼承來重用Singleton模式時,一些有趣的事情使我感到困惑。 我想與您分享,並要求您提供重用Singleton的解決方案。 我的代碼如下。

// Singleton.java
public class Singleton {
    private static Singleton mSingletonInstance;

    protected Singleton() {
        System.out.println("New Singleton Instance.");
    }

    public static Singleton getInstance() {
        if (mSingletonInstance == null)
            mSingletonInstance = new Singleton();

        return mSingletonInstance;
    }
}


// ExtendedSingleton.java
public class ExtendedSingleton extends Singleton{

    private static ExtendedSingleton mExtendedSingleton;

    private ExtendedSingleton() {
        super();
        System.out.println("New Extended Singleton Instance.");
    }

    public static ExtendedSingleton getInstance() {
        if (mExtendedSingleton == null)
            mExtendedSingleton = new ExtendedSingleton();
        return mExtendedSingleton;
    }

    public static void main(String args[]) {
        ExtendedSingleton extendedSingleton = ExtendedSingleton.getInstance();
    }
}

當然,我可以毫無例外地運行這些代碼。 但是我的意圖是通過擴展Singleton基類來重用Singleton模式。 但是,我必須重新鍵入子類中的所有代碼,並且根本不重用任何內容,這甚至在需要時編寫單獨的Singleton類也更好。 我真的很困惑。 誰能告訴我如何重用Singleton模式。 隨時修理我的英語,我知道我一定會犯很多錯誤。

如果您想使用Java的功能,我只會使用一個enum 您的課程看起來像

enum Singleton {
    INSTANCE;
    // add fields and methods to taste
}

enum ExtendedSingleton {
    INSTANCE;
    // delegate to Singleton as required.
}

如果需要繼承,則可以使用它們都實現的接口。

單例模式采用私有構造函數。 您違反了這條規則,這就是為什么感到困惑的原因。 不要擴展它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM