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();
}
}
}

