Voglio spostare un gruppo di metodi simili in una classe esterna. La classe è inizializzata con l'istanza di classe originale. Da lì posso accedervi per proprietà (istanza persistente) o per metodo (nuova istanza ogni volta).
Quale approccio è favorevole? In un sistema reale avrò molte di queste classi in possesso di molti metodi. Mi piacerebbe sentire le tue opinioni e conoscenze.
Esempio:
Ho una classe, chiamiamola Zoo, e nella mia classe Zoo tengo Liste di animali.
(Questi animali non hanno proprietà o metodi comuni in cui un'interfaccia o un'eredità sarebbero applicabili, questo è puramente per dare un esempio.)
public class Zoo
{
public List<Monkey> MonkeyList;
public List<Lion> LionList;
public List<Turtle> TurtleList;
public Zoo()
{
MonkeyList = new List<Monkey>();
LionList = new List<Lion>();
TurtleList = new List<Turtle>();
}
}
Ora voglio aggiungere animali al mio Zoo, quindi creo alcuni metodi Aggiungi.
Invece di metterli direttamente nella mia classe Zoo, li aggiungo a una classe separata e passo l'istanza di Zoo, in questo modo:
public class ZooAdd
{
private Zoo _zoo;
public ZooAdd(Zoo zoo)
{
_zoo = zoo;
}
public void Monkey(Monkey monkey)
{
_zoo.MonkeyList.Add(monkey);
}
public void Lion(Lion lion)
{
_zoo.LionList.Add(lion);
}
public void Turtle(Turtle turtle)
{
_zoo.TurtleList.Add(turtle);
}
}
Ora ho bisogno di aggiungere gli animali, ma di fronte a due opzioni, incerto che è preferibile:
Opzione 1: creo una proprietà
public class Zoo
{
public ZooAdd Add;
public Zoo
{
Add = new ZooAdd(this);
}
}
...
Zoo zoo = new Zoo();
Monkey monkey = new Monkey();
zoo.Add.Monkey(monkey);
Opzione 2: creo un metodo per restituire un'istanza (modello di fabbrica?)
public class Zoo
{
public ZooAdd Add()
{
return new ZooAdd(this);
}
}
...
Zoo zoo = new Zoo();
Monkey monkey = new Monkey();
zoo.Add().Monkey(monkey);
Entrambi gli approcci soddisfano i requisiti e hanno poca differenza nell'aspetto.
Credo che la seconda opzione potrebbe rivelarsi più utile per l'efficienza della memoria poiché l'oggetto creato attraverso il metodo è presumibilmente consumato dal GC dopo l'uso, ma non ho alcuna conoscenza concreta in merito a tale affermazione.
Per favore, prestami la tua saggezza.
Modifica
Tutti voi avete sollevato alcune giustificate preoccupazioni riguardo al mio approccio e sono d'accordo sul fatto che possa essere migliorato. Aggiornerò la struttura delle mie lezioni con i tuoi suggerimenti e l'assistenza in mente. Grazie a tutti per le vostre risposte.