我不认为有任何迹象表明抽象工厂是“工厂的工厂”。AnAbstractFactory<T>不会创建创建Ts 的工厂,而是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创建Connections,但它是抽象的,因为它是一个接口。
我倾向于同意您的观点,这Class<?>.newInstance()不是抽象工厂的典型示例,因为它不是抽象的,实际上它无法扩展。您不能要求一个实现将新值初始化为,而另一个实现将新值初始化为。ClassClass<Integer>17
但是,您可以通过说Class<? extends InputStream>是 s 的抽象工厂InputStream,具有具体实现Class<SocketInputStream>和Class<FileInputStream>. 不过,这不是“抽象”的传统含义(仍然只有一类:)Class。
但即便如此,它作为抽象工厂也没有用,因为实现“工厂”的新具体版本的方式是创建一个扩展的新类InputStream。这几乎不是抽象工厂的用途。