如何重用Singleton模式?

时间:2015-03-26 08:56:28

标签: java design-patterns

当我想通过在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模式。 随意修复我的英语,我知道我必须犯很多错误。

2 个答案:

答案 0 :(得分:3)

如果你想使用Java的功能,我会使用enum。你的课程看起来像

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

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

如果需要继承,可以使用它们都实现的接口。

答案 1 :(得分:1)

Singleton模式假设一个私有构造函数。你打破这个规则这就是混乱的原因。不要扩展它