C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



C#.NET / Design Patterns / Design Patterns: Factory

Design Patterns: Factory

Design Patterns: Factory

➪ Das Factory--Pattern .... Gestartet wird über Factorydemo.Run().


class Factorydemo
  {
    /// <summary>Allgemeines Produkt</summary>
    class Buch
    {
      private string titel, genre, autor, verlag;
      private int erscheinungsjahr;
      public Buch()
      {
      }
      public virtual string Titel 
             { get => titel; set => titel = value; }
      public virtual string Genre 
             { get => genre; set => genre = value; }
      public virtual string Verlag 
             { get => verlag; set => verlag = value; }
      public virtual string Autor 
             { get => autor; set => autor = value; }
      public virtual int Erscheinungsjahr 
             { get => erscheinungsjahr; 
               set => erscheinungsjahr = value; 
             }
      public override string ToString()
      {
        return $"Titel: {Titel}, Autor: {Autor}, 
                 Genre: {Genre}, Verlag: {Verlag}, 
                 Erscheinungsjahr: {Erscheinungsjahr}";
      }
    }
    /// <summary>Konkretes Buch</summary>
    class Krimi : Buch
    {
      public Krimi()
      {
        Genre = "Krimi";
      }        
    }
    /// <summary>Konkretes Buch</summary>
    class Fachbuch : Buch
    {
      public Fachbuch() 
      {
        Genre = "Fachbuch";
      }      
    }
    /// <summary>abstrakter Erzeuger</summary>
    abstract class Verlag
    {
      private string verlag;
      public Verlag(string verlagname)
      {
        verlag = verlagname;
      }
      public Buch BuchAusliefern(string autor, 
                                 string titel, 
                                 string genre, int jahr)
      {
        Buch buch = new Buch { Autor = autor, 
                               Verlag = verlag, 
                               Titel = titel, 
                               Genre = genre, 
                               Erscheinungsjahr = jahr };
        return buch;
      }
      public Krimi KrimiAusliefern(string autor, 
                                   string titel, int jahr)
      {
        Krimi buch = new Krimi { 
                               Autor = autor, 
                               Verlag = verlag, 
                               Titel = titel, 
                               Erscheinungsjahr = jahr };
        return buch;
      }
      public Fachbuch FachbuchAusliefern(string autor, 
                                         string titel, 
                                         int jahr)
      {
        Fachbuch buch = new Fachbuch { 
                               Autor = autor, 
                               Verlag=verlag, 
                               Titel = titel, 
                               Erscheinungsjahr = jahr };
        return buch;
      }      
    }
    /// <summary>konkreter Erzeuger</summary>
    class KonkreterVerlag : Verlag
    {
      public KonkreterVerlag(string verlagname) 
            : base(verlagname)
      {        
      }
    }
    public static void Run()
    {
      KonkreterVerlag v = new KonkreterVerlag("2 und 3");
      Buch k = v.BuchAusliefern("Karl May", 
                                "Das Kapital", 
                                "Reiseroman", 1912);
      Console.WriteLine(k);
      Console.WriteLine(v.FachbuchAusliefern(
                                "Boris Pasternak", 
                                "Dr. Schiwago", 
                                1958));
      Console.WriteLine(v.KrimiAusliefern(
                                "Arthur Conan Doyle", 
                                "Eine Studie in Scharlachrot", 
                                1900));
      Console.WriteLine(v.FachbuchAusliefern(
                                "Jürgen Burmester", 
                                "Fachkunde Metall", 
                                2017));
    }
  }

wg / 4. April 2021



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/cs_cons_DesignPatterns7.html