从抽象类构建singleton



简而言之,我正在尝试构建抽象类的子类,所有这些子类都将是singleton。我只想把单例"逻辑"放在超级类中。这在Java中可能吗?这是代码:

public abstract class Table {
    //the static singleton instance.  this will be inherited by subclasses of this class.
    protected static Table m_Instance;
    /**
     * @param tableName the database table name.
     */
    protected Table(String tableName, List<Column> columns) {
        TABLE_NAME = tableName;
        if(columns != null) {
            if(!m_Columns.isEmpty())
                m_Columns.clear();
            m_Columns.addAll(columns);
        } else {
            throw new IllegalStateException("the columns list was null.  this is a developer error.  please report to support.");
        }
    }
    protected static Table getInstance() {
        if(m_Instance == null)
            m_Instance = <? extends Table>;
    }
}

这里只是一个说明实现的简介:

public class CallTable extends Table {
    //this class would inherit 'getInstance()' and the method would return a 'CallTable' object
}

只有一个Table类的副本(留出多个类加载器等!(,因此只有一个值m_Instance

这意味着你不能在每个子类中都有一个的单例-只有任何一个子类的单例。

可以处理多个子类,例如将它们存储在超类的Map中,并按类查找,但其复杂性可能不值得

在任何一种情况下,getInstance方法都将返回Table,因此您将失去类型安全性——例如,您可能需要继续从Table强制转换为CallTable。Java的类型系统不支持这种情况。

还需要注意的是,至少可以说,singleton模式是有争议的,许多人都试图避免它

我只想把单例"逻辑"放在超级类中。

什么逻辑?只需遵循既定的习惯用法,用enum s定义你的单身汉。它很管用。不需要将Singleton逻辑放在抽象基类中。enum已经为你做了所有的工作。

相关内容

  • 没有找到相关文章