zoukankan      html  css  js  c++  java
  • 二、Builder模式

    构造方法参数过多时,Builder模式比使用伸缩构造方法(telescoping constructors)更容易读写,比JavaBeans模式更安全。

    Builder通常是它所构建的类的一个静态成员类(条目24)。以下是它在实践中的示例:

    // Builder Pattern
    
    public class NutritionFacts {
        private final int servingSize;
        private final int servings;
        private final int calories;
        private final int fat;
        private final int sodium;
        private final int carbohydrate;
    
        public static class Builder {
            // Required parameters
            private final int servingSize;
            private final int servings;
    
            // Optional parameters - initialized to default values
            private int calories      = 0;
            private int fat           = 0;
            private int sodium        = 0;
            private int carbohydrate  = 0;
    
            public Builder(int servingSize, int servings) {
                this.servingSize = servingSize;
                this.servings    = servings;
            }
    
            public Builder calories(int val) { 
                calories = val;      
                return this;
            }
    
            public Builder fat(int val) { 
               fat = val;           
               return this;
            }
    
            public Builder sodium(int val) { 
               sodium = val;        
               return this; 
            }
    
            public Builder carbohydrate(int val) { 
               carbohydrate = val;  
               return this; 
            }
    
            public NutritionFacts build() {
                return new NutritionFacts(this);
            }
        }
    
        private NutritionFacts(Builder builder) {
            servingSize  = builder.servingSize;
            servings     = builder.servings;
            calories     = builder.calories;
            fat          = builder.fat;
            sodium       = builder.sodium;
            carbohydrate = builder.carbohydrate;
        }
    }

    NutritionFacts类是不可变的,所有的参数默认值都在一个地方。builder的setter方法返回builder本身,这样调用就可以被链接起来,从而生成一个流畅的API。下面是客户端代码的示例:

    NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
        .calories(100).sodium(35).carbohydrate(27).build();
  • 相关阅读:
    数学—快速幂
    离散化
    造树计划——线段树
    Python map()函数
    python的discard和remove方法
    C++学习笔记之NULL vs nullptr
    哈姆雷特单词的排名
    读书笔记—《网络是怎么连接的》4.11
    滑动窗口—UVA11572 唯一的雪花 Unique Snowflakes
    javascript基础语法1.0
  • 原文地址:https://www.cnblogs.com/tabCtrlShift/p/9417147.html
Copyright © 2011-2022 走看看