多态性和局部变量

时间:2013-04-30 14:27:06

标签: java design-patterns polymorphism

我正在创建几个将从数据库中收集数据的线程。

然而,在所有这些线程中,我需要对Database对象的本地引用,据我所知,有两种方法可以使用接口:

public interface Command {
void execute();
void collectData();
void processData();
void setData(ArrayList<Objects> data);

}

然后在每个thead类(扩展命令接口)中手动设置变量

然而,在进行测试和搜索时,我发现我可以执行以下操作:

public abstract class commandtest implements Runnable{
    Database db;
    abstract void execute();
    abstract void collectData();
    abstract void processData();
    abstract void setData(ArrayList<Objects> data);
}

这里有一个抽象类,我的每个线程对象都可以扩展,然后创建一个构造函数来设置所需的变量。

我的问题很简单,这两种方法中的哪一种是最好的实践?

2 个答案:

答案 0 :(得分:2)

您不应仅仅根据共享某些代码或某些变量的需要来决定变量的放置。如果您的抽象类的设计理念是扩展它的所有内容必须可以访问Database,那么您将Database放在基类中。

另一方面,如果某些预期的实现与数据库无关,则不应将Database添加到抽象基类。当然,您不仅限于继承层次结构的两个级别:您始终可以从没有commandtest的{​​{1}}开始,并为需要数据库的所有内容添加另一级抽象类:

Database

答案 1 :(得分:1)

既然你说

  

在所有这些线程中,我需要对我的数据库进行本地引用   对象

你的第二种方法似乎合适。 我会将db变量声明为私有,因为每个线程的变量会有所不同(这就是我对你的问题所感受到的)。否则,可能会错误地在实现类之间共享。

private Database db;

并公开abstract setDatabase(Database database)方法,以便每个实现类设置其数据库。