Beispiel #1
0
//        Строитель(Builder) - шаблон проектирования, который инкапсулирует создание объекта и позволяет разделить его на различные этапы.

//Когда использовать паттерн Строитель?
//Когда процесс создания нового объекта не должен зависеть от того,
//      из каких частей этот объект состоит и как эти части связаны между собой

//Когда необходимо обеспечить получение различных вариаций объекта в процессе его создания

        // pattern Builder;
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ShapeCreator creator = new ShapeCreator();
            ShapeBuilder builder = null;



            Brush br = Brushes.Red;

            switch (((TextBlock)comboBoxColor.SelectedItem).Text)
            {
            case "Red": br = Brushes.Red; break;

            case "Green": br = Brushes.Green; break;

            case "Blue": br = Brushes.Blue; break;
            }

            double X = rand.Next(0, 300);
            double Y = rand.Next(0, 300);


            string f1 = ((TextBlock)comboBoxMain.SelectedItem).Text;
            string f2 = ((TextBlock)comboBoxSecond.SelectedItem).Text;

            if (f1 == "Эллипс" && f2 == "Круг")
            {
                builder = new MainInnerShapeBuilder1();
            }
            else if (f1 == "Эллипс" && f2 == "Треугольник")
            {
                builder = new MainInnerShapeBuilder2();
            }
            else if (f1 == "Прямоугольник" && f2 == "Круг")
            {
                builder = new MainInnerShapeBuilder3();
            }
            else if (f1 == "Прямоугольник" && f2 == "Треугольник")
            {
                builder = new MainInnerShapeBuilder4();
            }

            CompositeShape compositeShape = creator.Create(builder);

            compositeShape.MainShape.sh.Fill     = br; // заливка
            compositeShape.MainShape.sh.Stroke   = br; // обводка
            compositeShape.MainShape.sh.Margin   = new Thickness(X, Y, 0, 0);
            compositeShape.InnerShape.sh2.Margin = new Thickness(X, Y, 0, 0);

            grid3.Children.Add(compositeShape.MainShape.sh);
            grid3.Children.Add(compositeShape.InnerShape.sh2);
        }