Приветствую Вас ГостьСреда, 15.05.2024, 15:20

Программирование на Java, Android, Delphi


Блог

Главная » 2013 » Май » 21 » Шаблоны проектирования. Строитель
14:17
Шаблоны проектирования. Строитель
Шаблон проектирования Строитель (Builder) относится к производящим шаблонам. Этот паттерн отделяет конструирование сложного объекта от его модели, т.е содержания и представления. Шаблон строитель следует использовать если:
  • Алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект, и как они стыкуются между собой. codelab.ru codelab.ru оригинал источник
  • Процесс конструирования должен позволять создавать различные представления результирующего объекта.

  • AbstractBuilder  – строитель, абстрактный класс. Содержит перечень всех возможных абстрактных методов для создания и стыковки частей различных объектов (продуктов). 
  • ConcreteBuilder – конкретный строитель, занимающийся созданием какого-либо одного объекта (продукта). Конструирует и связывает вместе части продукта посредством реализации только тех абстракных методов интерфейса AbstractBuilder, которые нужны для создания частей этого продукта. Кроме этого – определяет внутреннее представление этого сложного объекта и предоставляет интерфейс для его получения.
  • Director – распорядитель. Фиксированный, единый алгоритм создания любых продуктов, для которых имеется соответствующий AbstractBuilder. Конструирует продукт пользуясь общим интерфейсом AbstractBuilder.
  • Product – конечный продукт, построенный с помощью конкретного ConcreteBuilder. Представляет сложный конструируемый объект. ConcreteBuilder строит внутреннее представление продукта и определяет процесс его сборки. Помимо этого может включать классы, которые определяют составные части, в том числе интерфейсы для сборки конечного результата из частей.

Последовательность вызова при реализации паттерна "Строитель":

Допустим нам нужно написать систему по генерации контента на веб-странице. Веб страница состоит из разделов: заголовка, меню, подвала, текстовой области, формы входа и новостей. Сделаем эту систему на строителе:

//Интерфейс строителя страницы сайта
interface SitePageBuilder{
//строители заголовка, меню, текстовой области, подвала, формы логина, новостей
void BuildCaption();
void BuildMainMenu();
void BuildTextArea();
void BuildFooter();
void BuildLoginForm();
void BuildNews();
//возвращает результирующу страницу
String GetResultSitePage();
}

//класс директора - он определяет как Builder должен построить страницу сайта
abstract class PageDirector{
//ссылка на строителя
protected SitePageBuilder pageBuilder;

//при создании объекта инициализируем ссылку на строителя
PageDirector(SitePageBuilder pb){
this.pageBuilder = pb;
}

abstract String GetSitePage();
}


//уточненный билдер страницы сайта
class FirsPageBuilder implements SitePageBuilder{

private String Result = "";

@Override
public void BuildCaption() {
Result = Result + "<div>Заголовок сайта компании Рога и Копыта</div>";
}

@Override
public void BuildMainMenu() {
Result = Result + "<a href=\"index.hml\">На главную</a>&nbsp;<a href=\"about.hml\">О компании</a>&nbsp;<a href=\"clients.hml\">Наши клиенты</a>&nbsp;";
}

@Override
public void BuildTextArea() {
Result = Result + "<p>Компания Роги и Копыта производит мясную и молочную продукцию.</p>";
}

@Override
public void BuildFooter() {
Result = Result + "<div class=\"foooter\">Звоните по телефону: (4855)-11-11-11</div>";
}

@Override
public void BuildLoginForm() {
Result = Result + "<div><form>Введите логин и пароль</form><div>";
}

@Override
public void BuildNews() {
Result = Result + "Новости: первая новость, вторая новость....";
}

@Override
public String GetResultSitePage() {
return Result;
}

}

//уточненный класс директора строителя
class FirstPageDirector extends PageDirector{
//при создании объекта инициализируем ссылку на строителя
FirstPageDirector(SitePageBuilder pb){
super (pb);
}

//в данной функции реализуется определенная директором логика сборки документа
String GetSitePage(){
pageBuilder.BuildCaption();
pageBuilder.BuildMainMenu();
pageBuilder.BuildNews();
pageBuilder.BuildTextArea();
pageBuilder.BuildLoginForm();
pageBuilder.BuildFooter();
return pageBuilder.GetResultSitePage();
}
}
Код клиента:
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
//клиентский код создает нужного директора и передает ему объект
//нужного строителя
FirstPageDirector fpd = new FirstPageDirector(new FirsPageBuilder());
//и вызывает метод на сборку документа
jTextArea1.append(fpd.GetSitePage());

}
Категория: Java (Разработка программного обеспечения на Java) | Просмотров: 1285 | Добавил: alex | Теги: Java, разработка программ, строитель, Builder, паттерн | Рейтинг: 5.0/3
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Май 2013  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Архив записей