Будівельник (Builder)

        class Flour

        {

            public string Sort { get; set; }

        }

        class Salt

        { }

        class Additives

        {

            public string Name { get; set; }

        }

        class Bread

        {

            public Flour Flour { get; set; }

            public Salt Salt { get; set; }

            public Additives Additives { get; set; }

            public override string ToString()

            {

                StringBuilder sb = new StringBuilder();

                if (Flour != null)

                    sb.Append(Flour.Sort + "\n");

                if (Salt != null)

                    sb.Append("Соль \n");

                if (Additives != null)

                    sb.Append("Добавки: " + Additives.Name + " \n");

                return sb.ToString();

            }

        }

        static void Main(string[] args)

        {

            Baker baker = new Baker();

            BreadBuilder builder = new RyeBreadBuilder();

            Bread ryeBread = baker.Bake(builder);

            Console.WriteLine(ryeBread.ToString());

            builder = new WheatBreadBuilder();

            Bread wheatBread = baker.Bake(builder);

            Console.WriteLine(wheatBread.ToString());

            Console.Read();

        }

        abstract class BreadBuilder

        {

            public Bread Bread { get; private set; }

            public void CreateBread()

            {

                Bread = new Bread();

            }

            public abstract void SetFlour();

            public abstract void SetSalt();

            public abstract void SetAdditives();

        }

        class Baker

        {

            public Bread Bake(BreadBuilder breadBuilder)

            {

                breadBuilder.CreateBread();

                breadBuilder.SetFlour();

                breadBuilder.SetSalt();

                breadBuilder.SetAdditives();

                return breadBuilder.Bread;

            }

        }

        class RyeBreadBuilder : BreadBuilder

        {

            public override void SetFlour()

            {

                this.Bread.Flour = new Flour { Sort = "Борошно чорне" };

            }

            public override void SetSalt()

            {

                this.Bread.Salt = new Salt();

            }

            public override void SetAdditives()

            {

            }

        }

        class WheatBreadBuilder : BreadBuilder

        {

            public override void SetFlour()

            {

                this.Bread.Flour = new Flour { Sort = "Борошно біле" };

            }

            public override void SetSalt()

            {

                this.Bread.Salt = new Salt();

            }

            public override void SetAdditives()

            {

                this.Bread.Additives = new Additives { Name = "Цукор" };

            }

        }