Angenommen, wir haben ein Objekt AppColor, welches uns beim Erstellen der gewünschten Farben hilft. Wir möchten die Möglichkeit besitzen, die Farben über die Parameter Red, Green, Blue und Alpha zu steuern. Weiter brauchen wir verschiedene Möglichkeiten, um das Objekt zu initialisieren – sprich zu erzeugen. Direkt mit allen Parametern RGBA, nur RGB oder den einzelnen Farben. Dies führt dazu, dass wir eine ganze Reihe an Konstruktoren im Objekt haben werden:
public AppColor(byte red = 0, byte green = 0, byte blue=0, byte alpha=0)
{
Red = red;
Green = green;
Blue = blue;
Alpha = alpha;
}
public AppColor(byte red, byte green, byte blue)
{
Red = red;
Green = green;
Blue = blue;
Alpha = 0;
}
public AppColor(byte red)
{
Red = red;
Green = 0;
Blue = 0;
Alpha = 0;
}
...
Eine viel elegantere Lösung können wir mit einer Fabrikmethode (Factory methode) erstellen. Dazu erstellen wir eine Sub-Klasse mit dem Namen Builder, welche sämtliche Parameter als einzelne Methode enthält und als Rückgabewert wieder sich selber enthält. Zusätzlich wird noch eine Methode Create benötigt, welche dann das eigentliche Objekt erstellt:
public class Builder
{
#region fields
private byte _red;
private byte _green;
private byte _blue;
private byte _alpha;
#endregion
#region methodes
public Builder Red(byte red)
{
_red = red;
return this;
}
public Builder Green(byte green)
{
_green = green;
return this;
}
public Builder Blue(byte blue)
{
_blue = blue;
return this;
}
public Builder Alpha(byte alpha)
{
_alpha = alpha;
return this;
}
public AppColor Create()
{
return new AppColor(_red, _green, _blue, _alpha);
}
#endregion
}
Welche Vorteile haben wir nun mit diesem Konstrukt? Jetzt haben wir die Möglichkeit, eine x-beliebige Kombination von Parameter zu verwenden, um das Objekt AppColor zu erstellen:
// Einzelne Farbe
AppColor colorRed = new AppColor.Builder().Red(255).Create();
// Gemischte Farbe
AppColor mixColor = new AppColor.Builder().Red(22).Green(25).Create();
// Gemischte Farbe
AppColor mixColor2 = new AppColor.Builder().Green(25).Blue(12).Create();
// Gemischte Farbe
AppColor mixColor3 = new AppColor.Builder().Red(255).Green(255).Blue(0).Alpha(215).Create();
...