Jump to content

Шаблон строителя

Паттерн построитель — это шаблон проектирования , который обеспечивает гибкое решение различных проблем создания объектов в объектно-ориентированном программировании . Шаблон строитель отделяет построение сложного объекта от его представления. Это один из 23 классических шаблонов проектирования, описанных в книге « Шаблоны проектирования» (часто называемых «Бандой четырех» или просто «GoF»), который относится к подкатегории « творческий шаблон» . [1]

Шаблон проектирования «строитель» решает такие проблемы, как: [2]

  • Как класс (один и тот же процесс построения) может создавать разные представления сложного объекта?
  • Как можно упростить класс, включающий создание сложного объекта?

Создание и сборка частей сложного объекта непосредственно внутри класса не является гибкой. Он обязывает класс создать конкретное представление сложного объекта и делает невозможным последующее изменение представления независимо от класса (без необходимости изменения).

Шаблон проектирования «строитель» описывает, как решать такие проблемы:

  • Инкапсулируйте создание и сборку частей сложного объекта в отдельный Builder объект.
  • Класс делегирует создание объекта Builder объект вместо непосредственного создания объектов.

Класс (один и тот же процесс построения) может делегировать разным Builder объекты для создания различных представлений сложного объекта.

Определение

[ редактировать ]

Цель шаблона проектирования «Построитель» — отделить построение сложного объекта от его представления. Таким образом, один и тот же процесс построения может создавать разные представления. [1]

Преимущества

[ редактировать ]

Преимущества шаблона строителя включают в себя: [3]

  • Позволяет изменять внутреннее представление продукта.
  • Инкапсулирует код для построения и представления.
  • Обеспечивает контроль над этапами строительного процесса.

Недостатки

[ редактировать ]

К недостаткам шаблона строителя относятся: [3]

Структура

[ редактировать ]

Класс UML и диаграмма последовательности

[ редактировать ]
Пример класса UML и диаграммы последовательности для шаблона проектирования построитель. [4]

На приведенной выше UML классов диаграмме тот Director класс не создает и не собирает ProductA1 и ProductB1 объекты напрямую. Вместо этого Director относится к Builder интерфейс для построения (создания и сборки) частей сложного объекта, что делает Director независимо от того, какие конкретные классы создаются (какое представление создается). Builder1 класс реализует Builder интерфейс путем создания и сборки ProductA1 и ProductB1 объекты.
Диаграмма UML последовательности показывает взаимодействие во время выполнения: Director вызовы объектов buildPartA() на Builder1 объект, который создает и собирает ProductA1 объект. После этого тот Director звонки buildPartB() на Builder1, который создает и собирает ProductB1 объект.

Диаграмма классов

[ редактировать ]
Структура строителя
Builder Structure
Строитель
Абстрактный интерфейс для создания объектов (продукта).
Бетоностроитель
Обеспечивает реализацию для Builder. Это объект, способный создавать другие объекты . Конструирует и собирает детали для сборки объектов.

Пример С # :

/// <summary>
/// Represents a product created by the builder.
/// </summary>
public class Bicycle
{
    public Bicycle(string make, string model, string colour, int height)
    {
        Make = make;
        Model = model;
        Colour = colour;
        Height = height;
    }

    public string Make { get; set; }
    public string Model { get; set; }
    public int Height { get; set; }
    public string Colour { get; set; }
}

/// <summary>
/// The builder abstraction.
/// </summary>
public interface IBicycleBuilder
{
    Bicycle GetResult();

    string Colour { get; set; }
    int Height { get; set; }
}

/// <summary>
/// Concrete builder implementation.
/// </summary>
public class GTBuilder : IBicycleBuilder
{
    public Bicycle GetResult()
    {
        return Height == 29 ? new Bicycle("GT", "Avalanche", Colour, Height) : null;
    }

    public string Colour { get; set; }
    public int Height { get; set; }
}

/// <summary>
/// The director.
/// </summary>
public class MountainBikeBuildDirector
{
    private IBicycleBuilder _builder;

    public MountainBikeBuildDirector(IBicycleBuilder builder)
    {
        _builder = builder;
    }

    public void Construct()
    {
        _builder.Colour = "Red";
        _builder.Height = 29;
    }

    public Bicycle GetResult()
	{
		return this._builder.GetResult();
	}
}

public class Client
{
    public void DoSomethingWithBicycles()
    {
        var director = new MountainBikeBuildDirector(new GTBuilder());
        // Director controls the stepwise creation of product and returns the result.
        director.Construct();
        Bicycle myMountainBike = director.GetResult();
    }
}

Директор собирает экземпляр велосипеда в приведенном выше примере, делегируя сборку отдельному объекту-строителю, который был передан Директору Клиентом.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Jump up to: а б Гамма и др. 1994 , с. 97.
  2. ^ «Шаблон проектирования Builder — проблема, решение и применимость» . w3sDesign.com . Проверено 13 августа 2017 г.
  3. ^ Jump up to: а б «Указатель /архив/2010/зима/51023-1/презентации» (PDF) . www.classes.cs.uchicago.edu . Проверено 3 марта 2016 г.
  4. ^ «Шаблон проектирования Builder — структура и сотрудничество» . w3sDesign.com . Проверено 12 августа 2017 г.
[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 714438f12fee8c76aa4d68d1ad962c0a__1722598020
URL1:https://arc.ask3.ru/arc/aa/71/0a/714438f12fee8c76aa4d68d1ad962c0a.html
Заголовок, (Title) документа по адресу, URL1:
Builder pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)