我不认为有任何迹象表明抽象工厂是“工厂的工厂”。AnAbstractFactory<T>
不会创建创建T
s 的工厂,而是T
直接创建 s。
它是抽象的想法是允许T
注入创建的逻辑。因此,例如,您可以:
public interface ConnectionFactory {
Connection newConnection();
}
//passed to your object normally:
public class RealConnectionFactory implements ConnectionFactory {
//...
}
//passed to your object when unit testing:
public class FakeConnectionFactory implements ConnectionFactory {
//...
}
//...
public class MyDao {
public MyDao(ConnectionFactory connectionFactory) {
this.conn = connectionFactory.newConnection();
}
}
在这种情况下,ConnectionFactory
创建Connection
s,但它是抽象的,因为它是一个接口。
我倾向于同意您的观点,这Class<?>.newInstance()
不是抽象工厂的典型示例,因为它不是抽象的,实际上它无法扩展。您不能要求一个实现将新值初始化为,而另一个实现将新值初始化为。Class
Class<Integer>
1
7
但是,您可以通过说Class<? extends InputStream>
是 s 的抽象工厂InputStream
,具有具体实现Class<SocketInputStream>
和Class<FileInputStream>
. 不过,这不是“抽象”的传统含义(仍然只有一类:)Class
。
但即便如此,它作为抽象工厂也没有用,因为实现“工厂”的新具体版本的方式是创建一个扩展的新类InputStream
。这几乎不是抽象工厂的用途。