public abstract class Samochod { public virtual string PodajNazwe() { return "Samochód"; } public virtual double PodajCene() { return 0; } } public class Ford : Samochod { public override string PodajNazwe() { return "Ford"; } public override double PodajCene() { return 50000; } } public class Peugot : Samochod { public override string PodajNazwe() { return "Peugot"; } public override double PodajCene() { return 60000; } } public abstract class Dekorator : Samochod { public Samochod pojazd; } public class Klima : Dekorator { public Klima(Samochod aPojazd) { pojazd = aPojazd; } public override string PodajNazwe() { return pojazd.PodajNazwe() + " z klimatyzacją"; } public override double PodajCene() { return pojazd.PodajCene() + 7000; } } public class Metalik : Dekorator { public Metalik(Samochod aPojazd) { pojazd = aPojazd; } public override string PodajNazwe() { return pojazd.PodajNazwe() + " z lakierem metalic"; } public override double PodajCene() { return pojazd.PodajCene() + 2000; } }
Przykład wykorzystania w klasie formularza (4 Button'y + 4 Label'e)
public partial class Form1 : Form { Samochod ford; Samochod peugot; //W konstruktorze tworzone są podstawowe wersje marek i podstawione są pod zmienne typu (sic!) Samochod public Form1() { InitializeComponent(); ford = new Ford(); peugot = new Peugot(); przedstaw(); } void przedstaw() { label1.Text = ford.PodajNazwe(); label2.Text = ford.PodajCene().ToString(); label3.Text = peugot.PodajNazwe(); label4.Text = peugot.PodajCene().ToString(); } private void btnAddKlimaToFord_Click(object sender, EventArgs e) { ford = new Klima(ford); przedstaw(); } private void btnAddMetalikToFord_Click(object sender, EventArgs e) { ford = new Metalik(ford); przedstaw(); } private void btnDelKlimaFromFord_Click(object sender, EventArgs e) { if (ford is Klima) ford = (ford as Dekorator).pojazd; przedstaw(); } private void btnDelMetalikFromFord_Click(object sender, EventArgs e) { if (ford is Metalik) ford = (ford as Dekorator).pojazd; przedstaw(); } private void btnAddKlimaToPeugot_Click(object sender, EventArgs e) { peugot = new Klima(peugot); przedstaw(); } private void btnAddMetalikToPeugot_Click(object sender, EventArgs e) { peugot = new Metalik(peugot); przedstaw(); } private void btnDelKlimaFromPeugot_Click(object sender, EventArgs e) { if (peugot is Klima) peugot = (peugot as Dekorator).pojazd; przedstaw(); } private void btnDelMetalikFromPeugot_Click(object sender, EventArgs e) { if (peugot is Metalik) peugot = (peugot as Dekorator).pojazd; przedstaw(); } }