Шаблон Builder Java

Необходимо задать конструирование сложного объекта, определяя для него только тип и содержимое. Детали построения объекта остаются скрытыми.

clip_image002

Рис. 5.8. Пример реализации шаблона Builder

Класс BaseBuilder определяет абстрактный интерфейс для создания частей объекта сложного класса User. Классы XMLBuilder и DBBuilder конструируют и собирают вместе части объекта класса User, а также представляет внешний интерфейс для доступа к нему. В результате объекты-строители могут работать с разными источниками, определяющими содержимое, не требуя при этом никаких изменений. При использовании этого шаблона появляется возможность контролировать пошагово весь процесс создания объекта-продукта.

Простая реализация шаблона Builder приведена ниже.

/*пример # 15 : «сложный» для построения объект : User.java */

package chapt05.builder;

public class User {

private String login = "Guest";

private String password = "Kc";

public String getLogin() {

return login;

}

public void setLogin(String login) {

this.login = login;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

Класс BaseBuilder – абстрактный класс-строитель, объявляющий в ка­честве поля ссылку на создаваемый объект и абстрактные методы его построения. Классы XMLBuilder и DBBuilder – наследуемые от него классы, реализующие специальные способы создания объекта. Таким образом, используя один класс User можно создать или администратора или модератора.

/*пример # 16 : разные способы построения объекта : BaseBuilder.java : XMLBuilder.java: DBBuilder.java */

package chapt05.builder;

public abstract class BaseBuilder {

protected User user = new User();

public User getUser() {

return user;

}

public abstract void buildLogin();

public abstract void buildPassword();

}

package chapt05.builder;

public class XMLBuilder extends BaseBuilder {

public void buildLogin() {

//реализация

user.setLogin("Admin");

}

public void buildPassword() {

//реализация

user.setPassword("Qu");

}

}

package chapt05.builder;

public class DBBuilder extends BaseBuilder {

public void buildLogin() {

//реализация

user.setLogin("Moderator");

}

public void buildPassword() {

//реализация

user.setPassword("Ku");

}

}

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

/*пример # 17 : тестирование процесса создания объекта : Main.java */

package chapt05.builder;

public class Main {

private static User buildUser(BaseBuilder builder) {

builder.buildLogin();

builder.buildPassword();

return builder.getUser();

}

public static void main(String args[]) {

User e1 = buildUser(new XMLBuilder());

User e2 = buildUser(new DBBuilder());

System.out.println(e1.getLogin());

System.out.println(e1.getPassword());

System.out.println(e2.getLogin());

System.out.println(e2.getPassword());

}

}

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100