Dardo - Tentando entender o valor do construtor 'factory'
Se estou entendendo corretamente:
"A factory constructor affords an abstract class to be
instantiated by another class, despite being abstract."
Como exemplo:
abstract class Animal {
String makeNoise(String sound);
String chooseColor(String color);
factory Animal() => new Cat();
}
class Cat implements Animal {
String makeNoise(String noise) => noise;
String chooseColor(color) => color;
}
O exposto acima me permite fazer isso:
Cat cat = new Animal();
var catSound = cat.makeNoise('Meow');
var catColor = cat.chooseColor('black');
print(catSound); // Meow
E isso também me impede de fazer isso:
class Dog implements Animal {
int age;
String makeNoise(String noise) => noise;
String chooseColor(color) => color;
}
Dog dog = new Animal(); // <-- Not allowed because of the factory constructor
Então, se estou correto com tudo isso, sou levado a perguntar por que o código extra para Animal?
Se você pretende usar um construtor de fábrica para animais, que cria apenas gatos, por que não apenas ter uma classe Cat com os métodos / propriedades necessários?
Ou, é o objetivo da classe Animal com um construtor de fábrica como acima,realmente uma interface projetada especificamente apenas para a classe Cat?