Nadesłany przez Kamil Dworak, 20 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.
c#.cs:
/**************************************** * Wzorzec Projektowy Factody Method * * (metoda fabrykujaca) * * www.algorytm.org * * Opracowal Dworak Kamil * *****************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication5 { /* nasz uogolniony produkt */ abstract class Czekolada { protected String about; public abstract Czekolada dawajCzekolade(); protected void dodajeKakao(){ Console.WriteLine("Dodaje kakao..."); } } /* bardziej konkretny produkt #1*/ class Mleczna : Czekolada { public Mleczna(){ about = "Mleczna"; } public void dodajeMleko(){ Console.WriteLine("Dodaje mleko..."); } public void dodajeCukier(){ Console.WriteLine("Dodaje cukier..."); } public override Czekolada dawajCzekolade(){ Console.WriteLine(about); dodajeKakao(); dodajeCukier(); dodajeMleko(); return this; } } /* bardziej konkretny produkt #2*/ class ZOrzechamiIBakaliami : Czekolada{ public ZOrzechamiIBakaliami(){ about = "Z orzechami i bakaliami"; } public void dodajeOrzechy(){ Console.WriteLine("Dodaje orzechy..."); } public void dodajeBakalie(){ Console.WriteLine("Dodaje bakalie..."); } public void dodajeCukier(){ Console.WriteLine("Dodaje cukier..."); } public override Czekolada dawajCzekolade(){ Console.WriteLine(about); dodajeKakao(); dodajeCukier(); dodajeOrzechy(); dodajeBakalie(); return this; } } /* bardziej konkretny produkt #3*/ class Gorzka : Czekolada { public Gorzka(){ about = "Gorzka"; } public void dodajeEkstratWaniliowy(){ Console.WriteLine("Dodaje ekstrat waniliowy..."); } public override Czekolada dawajCzekolade(){ Console.WriteLine(about); dodajeKakao(); dodajeEkstratWaniliowy(); return this; } } /* nasz stworca */ class ProducentCzekolady { public Czekolada produkcjaCzekolady(String about) { Czekolada czekolada = null; /* teraz decyduje o tym, ktora czekolade wytworzy */ if (about.Equals("Mleczna")) { czekolada = new Mleczna(); } else if (about.Equals("Z orzechami i bakaliami")) { czekolada = new ZOrzechamiIBakaliami(); } else if (about.Equals("Gorzka")) { czekolada = new Gorzka(); } return czekolada.dawajCzekolade(); } } class Program { static void Main(string[] args) { ProducentCzekolady producent = new ProducentCzekolady(); Czekolada[] tab = new Czekolada[3]; tab[0] = producent.produkcjaCzekolady("Gorzka"); Console.WriteLine("--------------------------------------------------------------"); tab[1] = producent.produkcjaCzekolady("Z orzechami i bakaliami"); Console.WriteLine("--------------------------------------------------------------"); tab[2] = producent.produkcjaCzekolady("Mleczna"); Console.ReadLine(); } } }