Qual è il modo corretto di associare poche classi con funzionalità simili?

0

Voglio farlo nel modo giusto per imparare

Ho alcune classi che hanno un solo metodo. Ad esempio:

public class RedColorText
{
   public void AddRedColorText(string text)
   {
      //something here
   }
}

public class WhiteColorText
{
   public void AddWhiteColorText(string text)
   {
      //something here
   }
}

Normalmente potrei semplicemente creare l'istanza di ognuno di essi in base al metodo che voglio usare, ma cosa accadrebbe se avessi bisogno di usare solo una classe e metodi di chiamata basati sulla condizione? Posso fare questo come sotto usando il costruttore e l'interruttore? O dovrei usare qualcos'altro come interfacce ecc?

public class ColorText
{
    public ColorText(enum condition, string text)
    { 
        switch(condition)
        {
            case 1:
                new RedColorText().AddRedColorText(text);
                break;
            case 2:
                new WhiteColorText().AddWhiteColorText(text);
                break;
        }
    }

}
    
posta Mateusz Migała 13.01.2015 - 12:58
fonte

1 risposta

4

È sempre possibile utilizzare un'interfaccia o una classe astratta per definire il contratto in cui si ha un comportamento generalizzato per la classe ColorText, ma è necessario mantenere il nome del metodo lo stesso (AddColorText)

public interface IColorText
{
    public abstract void AddColorText(string text);
}

public class RedColorText : IColorText
{
   public void AddColorText(string text)
   {
      //something here
   }
}

public class WhiteColorText : IColorText
{
   public void AddColorText(string text)
   {
      //something here
   }
}

E poi definisci una fabbrica per creare istanze basate sul tuo tipo

public class ColorTextFactory
{
    public static IColorText Create(enum condition)
    {
        switch(condition)
        {
            case 1:
                return new RedColorText();
            case 2:
                return new WhiteColorText();
            default :
                return null;
        }
    }
}

Se si desidera creare una classe ColorText rossa e aggiungere del testo, è possibile utilizzare il codice seguente

var colorText = ColorTextFactory(1);
colorText.AddColorText("Red Color Text");
    
risposta data 20.01.2015 - 02:12
fonte

Leggi altre domande sui tag