Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重用单例模式?_Java_Design Patterns - Fatal编程技术网

Java 如何重用单例模式?

Java 如何重用单例模式?,java,design-patterns,Java,Design Patterns,当我想在Java语言中使用继承来重用单例模式时,一些有趣的事情让我感到困惑。我想与您分享,并要求您提供一个重用Singleton的解决方案。 我的代码如下 // Singleton.java public class Singleton { private static Singleton mSingletonInstance; protected Singleton() { System.out.println("New Singleton Instance.

当我想在Java语言中使用继承来重用单例模式时,一些有趣的事情让我感到困惑。我想与您分享,并要求您提供一个重用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模式吗。
请随意修改我的英语,我知道我肯定有很多错误。

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

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

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

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

单例模式采用私有构造函数。你违反了这条规则,这就是为什么混乱。不要扩展它

这是单例模式的问题之一:您不能轻易地从单例继承。(这不是唯一的问题)在我看来,单例在很多情况下都是反模式的。你能给我提供一些细节让我容易理解吗?是的,你说得对。问题是我想通过继承重用Singleton模式。如果类被继承,则它必须具有受保护/公共构造函数。这让我很困惑。