Шаблон проектирования Builder инкапсулирует свойства объекта и позволяет создать его представление. Этот шаблон позволяет создавать сложные объекты с разными свойствами, даже если они принадлежат к одному классу.
Типичный объектный класс содержит атрибуты, конструкторы и методы. Шаблон построителя позволяет извлечь логику построения из класса объектов и поместить ее в классы, называемые построителями. Затем вы можете использовать эти классы построителей для создания различных вариантов одного и того же объекта.
Реализация шаблона Builder в Java
Хорошим примером шаблона конструктора является система заказа пиццы, которая позволяет клиентам выбирать различные варианты начинки.
Класс продукта
Один из подходов состоит в том, чтобы сделать конструктор интерфейсом, но сначала вам нужно будет создать класс продукта. Продуктом в этом примере приложения является пицца.
публичныйсортПицца{
// характеристики
частныйинт номер заказа;
частный Нить тесто для пиццы;
частный Нить топпинг;
// геттеры и сеттеры
публичныйинтполучить номер заказа(){
возвращаться номер заказа;
}
публичныйпустотаsetOrderNumber(инт номер заказа){
этот.НомерЗаказа =НомерЗаказа;
}
публичный Нить получитьПиццаТесто(){
возвращаться тесто для пиццы;
}
публичныйпустотаsetПиццаТесто(Тесто для пиццы){
этот.пиццаТесто = пиццаТесто;
}
публичный Нить получитьтопинг(){
возвращаться топпинг;
}
публичныйпустотаsetTopping(Струнная начинка){
этот.topping = топпинг;
}
}
Класс строителя
Пицца Java-класс имеет три свойства и соответствующие им геттеры и сеттеры, но нет методы конструктора. Интерфейс конструктора позволит вам создавать каждый аспект объекта пиццы отдельно. Затем это позволит вам получить весь объект пиццы.
публичныйинтерфейсСтроитель{
публичныйпустотасоздатьПиццаТесто();
публичныйпустотасоздатьТоппинг();
публичный Пицца получить пиццу();
}
Пример приложения для пиццы позволяет клиентам заказывать любые начинки, такие как сыр, пепперони, лук или различные комбинации. Следовательно, одна пицца, которую клиент закажет, — это сыр.
публичныйсортСырПиццаСтроительреализуетСтроитель{
частный Пицца пицца;
публичныйСырПиццаСтроитель(){
этот.пицца = новый Пицца();
}
@Override
публичныйпустотасоздатьПиццаТесто(){
этот.pizza.setПиццаТесто("Тесто");
}
@Override
публичныйпустотасоздатьТоппинг(){
этот.pizza.setTopping("Сыр");
}
@Override
публичный Пицца получить пиццу(){
возвращатьсяэтот.пицца;
}
}
Класс CheesePizzaBuilder реализует интерфейс Builder и использует его для создания новой сырной пиццы. Это одно из представлений объекта Pizza. Он также делает это таким образом, который не зависит от класса Pizza.
Класс CheesePizzaBuilder мало что знает о классе Pizza, он знает только то, что ему нужно знать для выполнения своей функции. Он знает, что у класса Pizza есть свойства тесто и начинка, и устанавливает для этих свойств два конкретных значения, которые будут у каждой пиццы с сыром. Теперь каждый раз, когда приложение вызывает класс CheesePizzaBuilder, оно будет создавать новую пиццу с сырной начинкой.
Класс режиссера
Класс директора является важным аспектом шаблона построителя. Единственной целью конкретного класса строителя является создание определенного объекта. Это достигается путем создания различных частей объекта по отдельности.
Однако классы бетона строителя не знают об алгоритме. Ни один из классов строителей не знает, как замесить тесто перед добавлением начинки. Это функция класса директора.
публичныйсортдиректор{
частный Строитель PizzaBuilder;
публичныйдиректор(Строитель пиццыСтроитель){
этот.pizzaBuilder = PizzaBuilder;
}
публичный Пицца получить пиццу(){
возвращатьсяэтот.pizzaBuilder.getPizza();
}
публичныйпустотасделатьПицца(){
этот.pizzaBuilder.createПиццаТесто();
этот.pizzaBuilder.createTopping();
}
}
Класс Director использует интерфейс конструктора для создания пиццы. Это хранитель алгоритма.
Преимущества использования шаблона проектирования Builder
Основным преимуществом использования шаблона проектирования Builder является его свойство инкапсуляции. Это важный аспект разработки программного обеспечения, поскольку он помогает в разработке безопасных приложений.
Еще одним преимуществом этого шаблона проектирования является его подход к построению объектов. Он позволяет создавать многошаговые процессы, в которых каждый шаг независим, что упрощает отладку.