algorytm.org

Implementacja w C#



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Strategia (strategy) - Implementacja w C#
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
Nadesłany przez Kamil Dworak, 06 sierpnia 2010 00:12
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.

strategy_1_cs.cs:
/****************************************
*   Wzorzec Projektowy Strategy         *
*   (strategia)                         *   
*   www.algorytm.org                    *
*   Opracowal Dworak Kamil              *
*****************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    public interface Pracowac
    {
        void pracuj();
    }

    public interface Dojezdzac
    {
        void dojezdzaj();
    }

    public interface SpedzanieWolnegoCzasu
    {
        void spedzajWolnyCzas();
    }

    //poszczegolne algorytmy
    public class NaprawaSamochodow : Pracowac {
        public void pracuj()
        {
            Console.WriteLine("Praca: naprawia samochody");
        }
    }

    public class Leczenie : Pracowac
    {
        public void pracuj()
        {
            Console.WriteLine("Praca: leczy ludzi");
        }
    }

    public class RoznoszenieListow : Pracowac
    {
        public void pracuj()
        {
            Console.WriteLine("Praca: roznosi listy");
        }
    }

    public class Samochod : Dojezdzac
    {
        public void dojezdzaj()
        {
            Console.WriteLine("Dojazd: samochod");
        }
    }

    public class Rower : Dojezdzac
    {
        public void dojezdzaj()
        {
            Console.WriteLine("Dojazd: rower");
        }
    }

    public class Silownia : SpedzanieWolnegoCzasu
    {
        public void spedzajWolnyCzas()
        {
            Console.WriteLine("Wolny Czas: silownia");
        }
    }

    public class LiteraturaPopularnoNaukowa : SpedzanieWolnegoCzasu
    {
        public void spedzajWolnyCzas()
        {
            Console.WriteLine("Wolny Czas: literatura popularno-naukowa");
        }
    }
    
    //kontekst
    public class Pracownik
    {
        private Pracowac pracowac = null;
        private Dojezdzac dojezdzac = null;
        private SpedzanieWolnegoCzasu spedzanieWolnegoCzasu = null;

        public Pracownik(String zawod)
        {
            if ((zawod.ToUpper()).Equals("MECHANIK"))
            {
                pracowac = new NaprawaSamochodow();
                dojezdzac = new Samochod();
                spedzanieWolnegoCzasu = new Silownia();
            }
            else if ((zawod.ToUpper()).Equals("LEKARZ"))
            {
                pracowac = new Leczenie();
                dojezdzac = new Samochod();
                spedzanieWolnegoCzasu = new LiteraturaPopularnoNaukowa();
            }
            else if ((zawod.ToUpper()).Equals("LISTONOSZ"))
            {
                pracowac = new RoznoszenieListow();
                dojezdzac = new Rower();
                spedzanieWolnegoCzasu = new Silownia();
            }

        }


        //tutaj wywolujemy algorytmy
        public void methods()
        {
            pracowac.pracuj();
            dojezdzac.dojezdzaj();
            spedzanieWolnegoCzasu.spedzajWolnyCzas();
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            String zawod = Console.ReadLine();
		
		try {
			Pracownik pracownik = new Pracownik(zawod);
			pracownik.methods();
		}catch(Exception e){
			Console.WriteLine("nie ma takiego zawodu");
		}
        zawod = Console.ReadLine();
        }

    }
}
Komentarze
photo
0 # D3uter 2012-09-14 13:09
Dzięki, po tonach bełkotu w necie nareszcie piękny, jasny przykład wzorca strategii.

THX
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # wiktor 2014-03-31 21:56
Naprawde niezly przyklad, jak wiekszosc na tej stronie. Gratuluje.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # Kamil Zień 2015-01-20 21:13
Przykład bardzo trafny. Zastanawiam się jedynie na odwróceniem zależności klasy pracownik od klas implementującyc h interfejsy. Klasa pracownik nie musi / nie może wiedzieć o rozwijanych implementacjach (wg mnie łamie to zasadę pojedynczej odpowiedzialnoś ci oraz chyba otwarte-zamknięte)
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz