Инструменты пользователя

Инструменты сайта


pattern_builder

Назад

Паттерн Builder отделяет алгоритм поэтапного конструирования сложного продукта (объекта) от его внешнего представления так, что с помощью одного и того же алгоритма можно получать разные представления этого продукта.

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

  • Инкапсуляция процесса создания сложного объекта.
  • Возможность поэтапного конструирования объекта с переменными набором этапов (в отличие от одно этапных фабрик).
  • Сокрытие внутреннего представления продукта от клиента.
  • Реализации продуктов могут свободно изменяться, потому что клиент имеет дело только с абстрактными интерфейсом.

Область применения

  • Часто используется для создание составных структур.

HappyMeal
public class HappyMeal
{ 
    private String burger;
    private String pepsi;
    private String fries;
    private String toy;
 
    public void setBurger(String burger)
    {
        this.burger = burger;
    }
 
    public void setPepsi(String pepsi)
    {
        this.pepsi = pepsi;
    }
 
    public void setFries(String fries)
    {
        this.fries = fries;
    }
 
    public void setToy(String toy)
    {
        this.toy = toy;
    }
 
    public void info()
    {
        System.out.println(burger);
        System.out.println(pepsi);
        System.out.println(fries);
        System.out.println(toy);
    }
}
HappyMealBuilder
public abstract class HappyMealBuilder
{
    protected HappyMeal happy = new HappyMeal();
    public abstract void BuildBurger();
 
    public abstract void BuildPepsi();
 
    public abstract void BuildFries();
 
    public abstract void BuildToy();
 
    public abstract HappyMeal GetProduct();
}
 
class BigHappyMealBuilder extends HappyMealBuilder{
 
    public void BuildBurger()
    {
        happy.setBurger("БигМак");
    }
 
    public void BuildPepsi()
    {
        happy.setPepsi("Pepsi 0.7");
    }
 
    public void BuildFries()
    {
        happy.setFries("Большая порция фри");
    }
 
    public void BuildToy()
    {
        happy.setToy("2 игрушки");
 
    }
 
    public HappyMeal GetProduct()
    {
        return happy;
    }
}
 
class SmallHappyMealBuilder extends HappyMealBuilder{
 
    public void BuildBurger()
    {
        happy.setBurger("Гамбургер");
    }
 
    public void BuildPepsi()
    {
        happy.setPepsi("Pepsi 0.3");
    }
 
    public void BuildFries()
    {
        happy.setFries("Малая порция фри");
    }
 
    public void BuildToy()
    {
        happy.setToy("1 игрушка");
 
    }
 
    public HappyMeal GetProduct()
    {
        return happy;
    }
}
Director
public class Director
{
    public HappyMeal Construct(HappyMealBuilder builder)
    {
        builder.BuildBurger();
        builder.BuildPepsi();
        builder.BuildFries();
        builder.BuildToy();
        return builder.GetProduct();
    }
}
Main
public class Main
{
    public static void main(String[] args)
    {
        Director director = new Director();
 
        System.out.println("---Big---");
        HappyMeal happyBig = director.Construct(new BigHappyMealBuilder());
        happyBig.info();
 
        System.out.println("---Small---");
        HappyMeal happySmall = director.Construct(new SmallHappyMealBuilder());
        happySmall.info();       
     }
}
/*
---Big---
БигМак
Pepsi 0.7
Большая порция фри
2 игрушки
 
---Small---
Гамбургер
Pepsi 0.3
Малая порция фри
1 игрушка
*/