Строитель (шаблон проектирования): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м rvv
Строка 667: Строка 667:
$waiter->constructPizza();
$waiter->constructPizza();
$pizza = $waiter->getPizza();
$pizza = $waiter->getPizza();
</source>
}}

=== Пример на [[Ruby]] ===
{{Hider_hiding
| title = Исходный текст на языке Ruby
| content =
<source lang="ruby">
#
# Базовый объект строительства
#
class Pizza
attr_accessor :pastry, :sauce, :garniture
end

#
# Builder - класс строитель
#
class BuilderPizza
attr_reader :pizza

def create_new_pizza
@pizza = Pizza.new
end

def get_pizza
"Your order. pastry: #{@pizza.pastry}, sauce: #{@pizza.sauce}, garniture: #{@pizza.garniture}"
end
end

#
# BuilderConcret - Конкретный строитель 1
#
class BuilderPizzaHawaii < BuilderPizza
def build_pastry
@pizza.pastry = 'normal'
end

def build_sauce
@pizza.sauce = 'soft'
end

def build_garniture
@pizza.garniture = 'jambon+ananas'
end
end

#
# BuilderConcret - Конкретный строитель 2
#
class BuilderPizzaSpicy < BuilderPizza
def build_pastry
@pizza.pastry = 'puff'
end

def build_sauce
@pizza.sauce = 'hot'
end

def build_garniture
@pizza.garniture = 'papperoni+salami'
end
end

#
# Director - Управляющий класс, запускающий строительство
#
class Waiter
def set_builder_pizza(bp)
@builder_pizza = bp
end

def get_pizza
@builder_pizza.get_pizza
end

def construct_pizza
@builder_pizza.create_new_pizza
@builder_pizza.build_pastry
@builder_pizza.build_sauce
@builder_pizza.build_garniture
end
end

waiter = Waiter.new

builder_pizza_hawaii = BuilderPizzaHawaii.new
builder_pizza_spicy = BuilderPizzaSpicy.new

waiter.set_builder_pizza(builder_pizza_hawaii)
waiter.construct_pizza

puts waiter.get_pizza
</source>
</source>
}}
}}

Версия от 14:42, 18 августа 2011

Строитель
Builder
Тип порождающий
Описан в Design Patterns Да

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

Цель

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

Плюсы

  • позволяет изменять внутреннее представление продукта;
  • изолирует код, реализующий конструирование и представление;
  • дает более тонкий контроль над процессом конструирования.

Применение

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

Применение

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

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

Примеры

Пример на Java

Пример на С#

Пример на C++

Пример на JavaScript

Пример на Python

Пример на PHP5

Пример на Ruby

Пример на Delphi

Пример на VB.NET

Ссылки