Evgenii Legotckoi
18 вересня 2018 р. 15:20

Приклад - шаблон проектування "Будівельник" на Java

Приклад шаблону проектування Будівельник на Java


  1. /* "Product" */
  2. class Pizza {
  3. private String dough = "";
  4. private String sauce = "";
  5. private String topping = "";
  6.  
  7. public void setDough(String dough) {
  8. this.dough = dough;
  9. }
  10.  
  11. public void setSauce(String sauce) {
  12. this.sauce = sauce;
  13. }
  14.  
  15. public void setTopping(String topping) {
  16. this.topping = topping;
  17. }
  18. }
  19.  
  20. /* "Abstract Builder" */
  21. abstract class PizzaBuilder {
  22. protected Pizza pizza;
  23.  
  24. public Pizza getPizza() {
  25. return pizza;
  26. }
  27.  
  28. public void createNewPizzaProduct() {
  29. pizza = new Pizza();
  30. }
  31.  
  32. public abstract void buildDough();
  33. public abstract void buildSauce();
  34. public abstract void buildTopping();
  35. }
  36.  
  37. /* "ConcreteBuilder" */
  38. class HawaiianPizzaBuilder extends PizzaBuilder {
  39. public void buildDough() {
  40. pizza.setDough("cross");
  41. }
  42.  
  43. public void buildSauce() {
  44. pizza.setSauce("mild");
  45. }
  46.  
  47. public void buildTopping() {
  48. pizza.setTopping("ham+pineapple");
  49. }
  50. }
  51.  
  52. /* "ConcreteBuilder" */
  53. class SpicyPizzaBuilder extends PizzaBuilder {
  54. public void buildDough() {
  55. pizza.setDough("pan baked");
  56. }
  57.  
  58. public void buildSauce() {
  59. pizza.setSauce("hot");
  60. }
  61.  
  62. public void buildTopping() {
  63. pizza.setTopping("pepperoni+salami");
  64. }
  65. }
  66.  
  67. /* "Director" */
  68. class Waiter {
  69. private PizzaBuilder pizzaBuilder;
  70.  
  71. public void setPizzaBuilder(PizzaBuilder pb) {
  72. pizzaBuilder = pb;
  73. }
  74.  
  75. public Pizza getPizza() {
  76. return pizzaBuilder.getPizza();
  77. }
  78.  
  79. public void constructPizza() {
  80. pizzaBuilder.createNewPizzaProduct();
  81. pizzaBuilder.buildDough();
  82. pizzaBuilder.buildSauce();
  83. pizzaBuilder.buildTopping();
  84. }
  85. }
  86.  
  87. /* A customer ordering a pizza. */
  88. public class PizzaBuilderDemo {
  89. public static void main(String[] args) {
  90. Waiter waiter = new Waiter();
  91. PizzaBuilder hawaiianPizzabuilder = new HawaiianPizzaBuilder();
  92. PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
  93.  
  94. waiter.setPizzaBuilder( hawaiianPizzabuilder );
  95. waiter.constructPizza();
  96.  
  97. Pizza pizza = waiter.getPizza();
  98. }
  99. }

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…