// Строитель(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); }