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.