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: