Imagine que agora, ao invés de ler do console, queremos ler as notas de um arquivo e salvar a média em outro. Para isso, não vamos alterar o código existente, vamos apenas criar duas classes. Uma implementando a interface ILeitorNotas e outra a interface IMostradorMedia.
Veja o código abaixo:
public class LeitorNotasEmArquivo : ILeitorNotas
{
private string filename;
public LeitorNotasEmArquivo(string filename)
{
this.filename = filename;
}
public List<decimal> LeNotas()
{
string[] valoresNoArquivo = File.ReadAllLines(filename);
List<decimal> notas = new List<decimal>();
foreach (string valor in valoresNoArquivo)
{
decimal nota = decimal.Parse(valor);
notas.Add(nota);
}
return notas;
}
}
public class MostradorMediaEmArquivo : IMostradorMedia
{
private string filename;
public MostradorMediaEmArquivo(string filename)
{
this.filename = filename;
}
public void ExibeMedia(decimal media)
{
File.WriteAllText(filename, media.ToString());
}
}
A chamada do ProcessaMedia ficaria assim:
static void Main(string[] args)
{
ProcessaMedia processaMedia = new ProcessaMedia(
new LeitorNotasEmArquivo("D:\\notas.txt"),
new MostradorMediaEmArquivo("D:\\media.txt")
);
processaMedia.Executa();
Console.ReadKey();
}
Apenas lembrando que esse código é apenas para fins de exemplo, ele não tem nenhum tratamento adicional para deixá-lo simples.