Ho diverse classi che si comportano tutte in base a un'interfaccia. Ma in ogni classe ci sono funzioni aggiuntive definite che danno ad ogni classe un comportamento leggermente diverso. Quello che voglio fare è che il programmatore utilizzi questa API per creare semplicemente un'istanza basata su alcuni parametri che generano il tipo di classe corretto. E poi lui / lei vedrebbe solo i metodi disponibili per quel tipo durante la programmazione
Quindi per esempio
La mia interfaccia
interface IChange
{
string Change(string inputString);
}
E dì che ho due classi che implementano questa interfaccia
class Changer1 : IChange
{
public string Change(string input){
...
}
public void DoSomethingSpecial1(){
///code that does something specific to Changer1 class
}
}
class Changer2 : IChange{
public string Change(string input){
...
}
public void DoSomethingSpecial2(){
///code that does something specific to Changer2 class
}
}
Quindi avrei un wrapper che imposta il Changer appropriato in base a un'enumerazione o qualche altro input dell'utente.
public enum ChangerType
{
Type1,
Type2
}
class MasterObject{
public MasterObject(ChangerType type)
{
if (type == ChangerType.Type1)
SetChanger(new Changer1());
if (type == ChangerType.Type2)
SetChanger(new Changer2());
}
private IChange _change;
private void SetChanger(IChange change)
{
this._change = change;
}
}
Quindi, come utente di questo, nel mio programma principale voglio fare qualcosa di simile al seguente in cui l'utente crea l'oggetto principale ma viene creato in modo tale da avere accesso solo alle funzioni appropriate. Cioè Sono disponibili solo DoSomethingSpecial1 o solo DoSomethingSpecial2 in base al tipo che hai creato.
class Program
{
static void Main(string[] args)
{
MasterObject obj1 = new MasterObject(ChangerType.Type1);
obj1.DoSomethingSpecial1();
string result1 = obj1.Change("test");
/// OR
MasterObject obj2 = new MasterObject(ChangerType.Type2);
obj2.DoSomethingSpecial2();
string result2 = obj2.Change("test");
}
}
Ho la sensazione che questo sia un pattern di tipo Factory o forse Abstract factory, ma non sono sicuro di come correggere il mio codice per implementarlo correttamente.