J'ai réfléchi à la meilleure façon d'implémenter un certain type de fonctionnalité ... étant des objets dérivés référençant d'autres objets dérivés avec la même base (y compris le référencement mutuel). Ci-dessous, le meilleur exemple (simple) que je puisse imaginer pour illustrer le genre de problème: une maison composée de 3 pièces (bien qu'en pratique elle pourrait être des centaines) chacune représentée par sa propre classe dérivée. Bien sûr cela ne fonctionnera pas tel quel, cela provoquerait un débordement de pile (de manière appropriée!)Suggérer un modèle de design?
En supposant que chaque pièce de l'exemple est spécifique à une pièce d'une maison imaginaire, il ne devrait pas y avoir plus d'une instance de toute sous-classe. Construire beaucoup d'instances, même sans la récursivité, serait désordonné. Cela me ferait penser à un singleton si ce n'était pas un tabou ... quelqu'un peut-il suggérer quelque chose de plus approprié?
Merci!
public abstract class Room
{
abstract public void DoAction();
public Room[] ConnectedRooms;
}
public class Kitchen : Room
{
public Kitchen() { ConnectedRooms = new Room[] { new Hall() }; }
public override void DoAction() { MakeTea(); }
}
public class Bedroom : Room
{
public Bedroom() { ConnectedRooms = new Room[] { new Hall() }; }
public override void DoAction() { Sleep(); }
}
public class Hall : Room
{
public Hall() { ConnectedRooms = new Room[] { new Hall(), new Bedroom() }; }
public override void DoAction() { LookOutWindow(); }
}
Je ne recommanderais pas singleton ici juste pour appliquer l'exigence d'instance unique. Il est vraiment difficile de recommander quoi que ce soit sans en savoir plus sur ce que vous faites. Parfois, le meilleur motif de conception n'est pas un motif de conception. Mieux vaut savoir quand ne pas utiliser un motif que celui à utiliser. –
Le constructeur de Hall est-il censé installer les pièces connectées dans une autre salle ou dans la cuisine? –