Nadesłany przez Kamil Dworak, 14 sierpnia 2010 22:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
dekorator.cs:
/**************************************** * Wzorzec Projektowy Decorator * * (dekorator) * * www.algorytm.org * * Opracowal Dworak Kamil * *****************************************/ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace Main { /* Standardowy nieudekorowany samochod */ abstract class Samochod { protected string samochod = "Samochod podstawowy"; virtual public String about(){ return samochod; } public abstract double cena(); } /* abstrakcyjny dekorator */ abstract class Dekorator : Samochod { public abstract override String about(); } /* teraz mamy 2 przykladowe marki samochodow */ class Mercedes : Samochod { public Mercedes(){ samochod = "Mercedes"; } public override double cena(){ return 500000; } } class Fiat : Samochod { public Fiat(){ samochod = "Fiat"; } public override double cena(){ return 100000; } } /* czas na same dodatki */ class Klimatyzacja : Dekorator { Samochod car; public Klimatyzacja(Samochod samochod){ car = samochod; } public override String about(){ return car.about() + " + klimatyzacja"; } public override double cena(){ if (car is Mercedes) { return car.cena() + 100000; } else if (car is Fiat) { return car.cena() + 20000; } return 0; } } class OponyZimowe : Dekorator { Samochod car; public OponyZimowe(Samochod samochod){ car = samochod; } public override String about() { return car.about() + " + opony zimowe"; } /* niech ceny beda takie same */ public override double cena() { return car.cena() + 31234; } } public class Application { public static void Main(String[] args) { Samochod s1 = new Mercedes(); Samochod s2 = new Fiat(); Console.WriteLine("\nBez wyposazenia"); Console.WriteLine(s1.about() + " " + s1.cena()); Console.WriteLine(s2.about() + " " + s2.cena()); //dodajemy po klimie s1 = new Klimatyzacja(s1); s2 = new Klimatyzacja(s2); Console.WriteLine("\nZ Klima"); Console.WriteLine(s1.about() + " " + s1.cena()); Console.WriteLine(s2.about() + " " + s2.cena()); // i opony s1 = new OponyZimowe(s1); s2 = new OponyZimowe(s2); Console.WriteLine("\nZ oponami"); Console.WriteLine(s1.about() + " " + s1.cena()); Console.WriteLine(s2.about() + " " + s2.cena()); //odrazu tworzymy wyposazony samochod Console.WriteLine("\nPelne wyposazenie"); Samochod s3 = new OponyZimowe(new Klimatyzacja(new Mercedes())); Console.WriteLine(s3.about() + " " + s3.cena()); Console.ReadLine(); } } }
Musiałeś dziedziczenia gdzieś nie dodać.