Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Design Pattern de construction

2 réponses
Avatar
Ghislain
Bonjour,
En fait je cherche un groupe d=E9di=E9 aux design pattern, si vous
connaissez =E7a m'int=E9resse.
J'ai besoin de cr=E9er une instance du m=EAme type qu'une variable dont
je ne connais pas le type.
Pour simplifier, prenons la classe abstraite Animal dont d=E9rivent
Dog et Cat.
qqe part dans une m=E9thode, j'ai :
void method (Animal animal){
// Il me faut une nouvelle instance du m=EAme type que Animal
Animal otherAnimal;
// Je sais que je peux =E9crire :
if (animal instanceof Dog)
otherAnimal =3D new Dog();
else if (animal instanceof Cat)
otherAnimal =3D new Cat();
}
Or nous savons tous que c'est ce qu'il ne faut pas faire. Je ne veux
pas rendre Cloneable la classe Animal parce que je ne veux pas une
copie mais vraiment une nouvelle instance toute neuve.
Merci pour votre aide,
Ghislain

2 réponses

Avatar
Pierre-Charles David
Ghislain a écrit :
Bonjour,
En fait je cherche un groupe dédié aux design pattern, si vous
connaissez ça m'intéresse.
J'ai besoin de créer une instance du même type qu'une variable dont
je ne connais pas le type.
Pour simplifier, prenons la classe abstraite Animal dont dérivent
Dog et Cat.
qqe part dans une méthode, j'ai :
void method (Animal animal){
// Il me faut une nouvelle instance du même type que Animal



Utilises la réflection :

Animal otherAnimal = (Animal) animal.getClass().newInstance();

Cela suppose que toutes les sous-classes de Animal dont animal peut être
instance fournissent un constructeur par défaut (sans paramètres). Il
faut aussi gérer un certain nombre d'exceptions qui peuvent être levées
par #newInstance().
Avatar
Ghislain
Cool, merci !