Dieses Pattern kann genutzt werden, um Baumähnliche Strukturen abzubilden.

Als Beispiel habe ich hier eine kleine Firmenstruktur implementiert.
Die Klasse des CompositePattrns

namespace CompositePattern
{
    interface IMitarbeiter
    {
        string Bezeichnung();
    }
 
    class Chef : IMitarbeiter
    {
        public virtual string Bezeichnung()
        {
            return "Ich bin der Chef und mache alles anders.";
        }
    }
 
    class Teamleiter : Chef, IMitarbeiter
    {
        public override string Bezeichnung()
        {
            return "Ich bin der 1. Honk vom Chef";
        }
    }
 
    class Teamleiter2 : Chef, IMitarbeiter
    {
        public override string Bezeichnung()
        {
            return "Ich bin der 2. Honk vom Chef";
        }
    }
 
    class Gruppenleiter : Teamleiter, IMitarbeiter
    {
        public override string Bezeichnung()
        {
            return "Ich bin der Gruppenleiter vom 1. Honk";
        }
    }
 
    class GruppenMitarbeiter : Gruppenleiter, IMitarbeiter
    {
        public new string Bezeichnung()
        {
            return "Ich bin GruppenMitarbeiter des Gruppenleiter´s vom 1. Honk und darf aufräumen.";
        }
    }
 
    
}

Und hier noch die Programmklasse

using System;
using System.Collections.Generic;
 
namespace CompositePattern
{
    class Program
    {
        static void Main(string[] args)
        {
 
            IMitarbeiter grpMitarbeiter = new GruppenMitarbeiter();
            IMitarbeiter grpLeiter = new Gruppenleiter();
            IMitarbeiter teamleiter = new Teamleiter();
            IMitarbeiter teamleiter2 = new Teamleiter2();
            IMitarbeiter chef = new Chef();
 
            List<imitarbeiter> objMitarbeiter = new List<imitarbeiter>();
 
 
            objMitarbeiter.Add(grpMitarbeiter);
            objMitarbeiter.Add(grpLeiter);
            objMitarbeiter.Add(teamleiter2);
            objMitarbeiter.Add(teamleiter);
            objMitarbeiter.Add(chef);
 
 
            IColor txtWeiss = new Weiss();
            txtWeiss.Draw();
             
            foreach (IMitarbeiter obj in objMitarbeiter)
            {
                //obj.Bezeichnung();
                Console.WriteLine(obj.GetType() + "\n> " + obj.Bezeichnung());
            }
 
            Console.ReadLine();
        }
    }
}
 
</imitarbeiter></imitarbeiter>

Und so sieht es aus:

Composite Pattern

Neuste Einträge

Delegate

Die Verwendung eines Delegaten eignet sich um Funktionen / Methoden zu kapseln.
Sie ähneln einem Funktionszeigen im klassischem C und C++, in C# sind diese
objektorientiert und typsicher.


Als Beispiel für die Verwendung eines Delegate habe ich 2 kleine Funktionen, die ich mit dem Delegate benutzen möchte.

Die Delegateklasse

namespace Delegates
{
    class LibDelegates
    {
        public delegate string SimpleDelegate(string s, string x);
 
        public delegate int SimpleMath(int in1, int in2);
 
        public string String2String1(string str1, string str2)
        {
            return (str2 + " " + str1);
        }
         
        public string String1String2(string str1, string str2)
        {
            return (str1 + " " + str2);
        } 
 
        public int Multiplitzieren(int zahl1, int zahl2)
        {
            return zahl1*zahl2;
        }
 
        public int Addieren(int zahl1, int zahl2)
        {
            return zahl1 + zahl2;
        }
 
    }
}

Der Programmaufruf

using System;
 
namespace Delegates
{
    class Program
    {
        static void Main(string[] args)
        {
            var myDel = new LibDelegates();
             
            var myDelegate1 = new LibDelegates.SimpleDelegate(myDel.String1String2);
            var myDelegate2 = new LibDelegates.SimpleDelegate(myDel.String2String1);
             
            Console.WriteLine("Delegate mit String");
            Console.WriteLine("Vor/Nach: {0}", myDelegate1("Vor", "nach"));
            Console.WriteLine("Vor/Nach: {0}", myDelegate2("Vor", "nach"));
 
            var myDelegate3 = new LibDelegates.SimpleMath(myDel.Multiplitzieren);
            var myDelegate4 = new LibDelegates.SimpleMath(myDel.Addieren);
             
            Console.WriteLine("Delegate mit Int");
            Console.WriteLine("Multiplikation: {0}", myDelegate3(5, 5));
            Console.WriteLine("Addition: {0}",myDelegate4(5, 5));
 
            Console.ReadLine();
 
        }
       
    }
}