首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Builder pattern-生成器形式

2013-04-07 
Builder pattern-生成器模式生成器(英:Builder)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以

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

热点排行