using System.Collections.Generic;
var conta = new ContaCorrente(1000);
var pizzasQueEuComi = new List<Pizza>()
new Pizza("4 Queijos", preco: 100),
new Pizza("Calabreza",preco: 50),
new Pizza("Filé com cheddar",preco: 20),
var pizzaria = new Pizzaria();
Console.WriteLine("Pagando com Pix");
pizzaria.PagarORodizio(conta, pizzasQueEuComi, new Pix());
Console.WriteLine("Pagando com Cheque");
pizzaria.PagarORodizio(conta, pizzasQueEuComi, new Cheque());
Console.WriteLine("Pagando com Credito");
pizzaria.PagarORodizio(conta, pizzasQueEuComi, new Credito());
public void PagarORodizio(ContaCorrente conta, List<Pizza> pizzas, FormaDePagamento formaDePagamento)
for (int i = 0; i < pizzas.Count; i++)
Console.WriteLine("Pagando pizza: "+ pizzas[i]);
formaDePagamento.Pagar(conta, pizzas[i]);
Console.WriteLine("Saldo após o pagamento: " + conta.Saldo);
public Pizza(String name, double preco)
public String Name { get; set; }
public double Preco { get; set; }
public class ContaCorrente
public double Saldo { get; set; }
public ContaCorrente(double saldo)
public void RetirarSaldo(double valor)
public interface FormaDePagamento
public void Pagar(ContaCorrente conta, Pizza pizza);
public class Pix : FormaDePagamento
public void Pagar(ContaCorrente conta, Pizza pizza)
Console.WriteLine("Pagando no pix");
conta.RetirarSaldo(pizza.Preco);
public class Credito : FormaDePagamento
public void Pagar(ContaCorrente conta, Pizza pizza)
Console.WriteLine("Pagando no credito");
conta.RetirarSaldo(pizza.Preco * 1.1);
public class Cheque : FormaDePagamento
public void Pagar(ContaCorrente conta, Pizza pizza)
Console.WriteLine("Pagando no cheque");
conta.RetirarSaldo(pizza.Preco * 2.5);