Návrhový vzor Builder (GOF)

Popis a ukázka jednoduché implementace v C#

Co je to návrhový vzor?

Návrhový vzor (anglicky design pattern) v softwarovém inženýrství představuje obecné řešení problému, které se využívá při návrhu počítačových programů. viz wiki Návrhový vzor by se dal popsat jako "best practise" pro konkrétní řešení.

GOF (Gang of four)

Základním kamenem pro návrhové vzory se stala kniha Design Patterns: Elements of Reusable Object-Oriented Software, jejímiž autory jsou Erich Gamma, Richard Helm, Ralph Johnson a John Vlissides také známí jako Gang of Four.

Builder

Builder nám může pomoci vytvořit instanci třídy, která má mnoho různých nastavení. Což by vedlo ke konstruktoru s mnoha parametry.

Základní rysy Builderu

Je obvyklé že metody pro nastavení objektu se mohou řetězit (builder.SetText("").SetWidth(100)...) tzv "method chaining", dále má builder metodu Build() či GetProduct() která vrací výsledný objekt.

Ukázka implementace Builderu v C#

Nejjednodušeji si builder můžeme představit takto


class ButtonBuilder
{
    public ButtonBuilder()
    {
        //v konstruktoru můžeme přednastavit defaultní hodnoty
        _Button.Text = "Default";
    }

    private Button _Button = new Button();

    public ButtonBuilder SetText(string text)
    {
        _Button.Text = text;
        return this;
    }
    public ButtonBuilder SetHeight(int height)
    {
        _Button.Height = height;
        return this;
    }
    public ButtonBuilder SetWidth(int width)
    {
        _Button.Width = width;
        return this;
    }
    public Button Build()
    {
        return _Button;
    }
}
    

S takovýmto builderem bychom pracovali například:


    Builder.Builder builder = new Builder.Builder();
    Button button = builder.SetHeight(100)
                    .SetWidth(200)
                    .SetText("Text")
                    .Build();
    

Reálně se asi spíše setkáme se složitější implementací builderu, která se zkládá z rozhraní IBuilder (či abstraktní třídy) a konkrétnch builderů implementujících toto rozhraní a dále z třídy Director do které klient vloží konkrétní builder a ta zajistí sestavení produktu.

Ukázka jednoduché implementace Singletonu

Použito:

  • Pro zobrazení C# kódu použito highlight.pack.js link