读书人

Builder pattern-生成器形式

发布时间: 2013-04-07 12:50:11 作者: rapoo

Builder pattern-生成器模式
生成器(英:Builder)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
Builder pattern-生成器形式

参与者
Builder
创建对象的抽象接口。
Concrete Builder
提供Builder的实现。
Director
负责管理对象创建的正确顺序。I
Product
由Director使用Builder创建的最终对象。

Java代码 Builder pattern-生成器形式

  1. package com.sinosoft.train.gof.cp;
  2. /** "Product"-建造的最终产品-比萨饼 */
  3. class Pizza {
  4. private String dough = "";
  5. private String sauce = "";
  6. private String topping = "";
  7. public void setDough(String dough) {
  8. this.dough = dough;
  9. }
  10. public void setSauce(String sauce) {
  11. this.sauce = sauce;
  12. }
  13. public void setTopping(String topping) {
  14. this.topping = topping;
  15. }
  16. @Override
  17. public String toString() {
  18. return dough + "-" + sauce + "-" + topping;
  19. }
  20. }
  21. /** "Abstract Builder"-比萨饼抽象生成器 */
  22. abstract class PizzaBuilder {
  23. protected Pizza pizza;
  24. public Pizza getPizza() {
  25. return pizza;
  26. }
  27. public void createNewPizzaProduct() {
  28. pizza = new Pizza();
  29. }
  30. public abstract void buildDough();
  31. public abstract void buildSauce();
  32. public abstract void buildTopping();
  33. }
  34. /** "ConcreteBuilder"-夏威夷人的比萨饼生成器 */
  35. class HawaiianPizzaBuilder extends PizzaBuilder {
  36. public void buildDough() {
  37. pizza.setDough("cross");
  38. }
  39. public void buildSauce() {
  40. pizza.setSauce("mild");
  41. }
  42. public void buildTopping() {
  43. pizza.setTopping("ham+pineapple");
  44. }
  45. }
  46. /** "ConcreteBuilder" -辛辣的比萨饼生成器 */
  47. class SpicyPizzaBuilder extends PizzaBuilder {
  48. public void buildDough() {
  49. pizza.setDough("pan baked");
  50. }
  51. public void buildSauce() {
  52. pizza.setSauce("hot");
  53. }
  54. public void buildTopping() {
  55. pizza.setTopping("pepperoni+salami");
  56. }
  57. }
  58. /** "Director" - 厨师 */
  59. class Cook {
  60. private PizzaBuilder pizzaBuilder;
  61. public void setPizzaBuilder(PizzaBuilder pb) {
  62. pizzaBuilder = pb;
  63. }
  64. public Pizza getPizza() {
  65. return pizzaBuilder.getPizza();
  66. }
  67. public void constructPizza() {
  68. pizzaBuilder.createNewPizzaProduct();
  69. pizzaBuilder.buildDough();
  70. pizzaBuilder.buildSauce();
  71. pizzaBuilder.buildTopping();
  72. }
  73. }
  74. /** A given type of pizza being constructed. */
  75. public class Builder {
  76. public static void main(String[] args) {
  77. Cook cook = new Cook();
  78. PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
  79. PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
  80. cook.setPizzaBuilder(hawaiianPizzaBuilder);
  81. cook.constructPizza();
  82. Pizza hawaiian = cook.getPizza();
  83. System.out.println(hawaiian);
  84. cook.setPizzaBuilder(spicyPizzaBuilder);
  85. cook.constructPizza();
  86. Pizza spicy = cook.getPizza();
  87. System.out.println(spicy);
  88. }
  89. }

读书人网 >编程

热点推荐