为什么要这样设计,还是我理解错误

在一些开源项目中,我经常看到这样的类设计代码,成员变量用抽象类或接口
比如lucene中的
final class DocumentWriter {
private Analyzer analyzer;
private Directory directory;
private FieldInfos fieldInfos;
private int maxFieldLength;
...
}
其中 Directory,Analyzer 是抽象类,这样设计的目的是什么?
另外,如果用接口和用抽象类的区别是什么?

我估计是这个类中有某一部分是需要变化的,所以它就用了一个抽象类作为
成员变量,这样从语义的角度理解更加自然,方便吧!
接口是不能作为成员变量的吧!

sorry,上面的我说错了,我用的是C++,c++中的接口是纯需函数,只能定义为指针,不能定义为成员变量。
这里用抽象类,目的还是可以方便扩展吧,但是在调用的时候,抽象类中的函数必须已经实现好了,同时也可以实现接口的功能,这样用比接口更加灵活了。

这样做的目的是希望尽可能提供灵活性和重用性,使class和class之间是松耦合的

这样可以使你的类依赖一个抽象,而不是一个具体实现。否则就失去了抽象的意义。

是不是传说中的factory设计模式?