Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns by D.pdf
Скачиваний:
25
Добавлен:
19.02.2016
Размер:
2.57 Mб
Скачать

Builder — Строитель

Строитель (англ. Builder) — порождающий шаблон проектирования.

Цель

Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.

Плюсы

позволяет изменять внутреннее представление продукта;

изолирует код, реализующий конструирование и представление;

дает более тонкий контроль над процессом конструирования.

Применение

алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой;

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

Объекты «моникер» в COM есть Строители, инициализируемые строкой. Более того, для их создания используется другой Строитель — MkParseDisplayNameEx, который определяет по строке класс моникера, создает моникер и инициализирует его этой же строкой.

Один из этих объектов, URL Moniker, используется для всей загрузки страниц, вложений и документов в

Microsoft Internet Explorer.

Структура

17

Пример реализации using System;

using System.Collections.Generic;

namespace Builder

{

public class MainApp

{

public static void Main()

{

// Create director and builders Director director = new Director();

Builder b1 = new ConcreteBuilder1();

Builder b2 = new ConcreteBuilder2();

// Construct two products director.Construct(b1); Product p1 = b1.GetResult(); p1.Show();

director.Construct(b2); Product p2 = b2.GetResult(); p2.Show();

// Wait for user Console.Read();

}

}

// "Director"

class Director

{

// Builder uses a complex series of steps public void Construct(Builder builder)

{

builder.BuildPartA();

builder.BuildPartB();

}

}

// "Builder"

abstract class Builder

{

public virtual void BuildPartA()

{

}

public virtual void BuildPartB()

{

}

public virtual Product GetResult()

{

}

}

// "ConcreteBuilder1"

class ConcreteBuilder1 : Builder

{

private readonly Product product = new Product();

public override void BuildPartA()

{

product.Add("PartA");

18

}

public override void BuildPartB()

{

product.Add("PartB");

}

public override Product GetResult()

{

return product;

}

}

// "ConcreteBuilder2"

class ConcreteBuilder2 : Builder

{

private readonly Product product = new Product();

public override void BuildPartA()

{

product.Add("PartX");

}

public override void BuildPartB()

{

product.Add("PartY");

}

public override Product GetResult()

{

return product;

}

}

// "Product"

class Product

{

private readonly List<string> parts = new List<string>();

public void Add(string part)

{

parts.Add(part);

}

public void Show()

{

Console.WriteLine("\nProduct Parts -------"); foreach (string part in parts)

Console.WriteLine(part);

}

}

}

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]