This is a @creational design pattern and similar to @factory pattern .
Here, we create an AbstractFactory class that return the required type and it acts as a super factory that the concrete factory classes can extend and implement.
abstract AbstractFactory {
abstract Bird getBird(type);
}
class BirdFactory extends AbstractFactory {
Bird getBird(type) {
// Check type and return matched.
}
}
The abstract factory is an object and can contain multiple factory methods in it.