zoukankan      html  css  js  c++  java
  • 第二条:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)

    构建器模式(Builder Pattern):

    View Code
    package edu.sjtu.erplab.builder;
    
    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 {
            // 必要参数
            private final int servingSize;
            private final int servings;
            // 可选参数
            private int calories = 0;
            private int fat = 0;
            private int carbohydrate = 0;
            private int sodium = 0;
    
            public Builder(int servingSize, int servings) {
                this.servingSize = servingSize;
                this.servings = servings;
            }
    
            public Builder calories(int val) {
                calories = val;
                return this;//返回Builder类对象本身,以便把调用链接起来
            }
    
            public Builder fat(int val) {
                fat = val;
                return this;
            }
    
            public Builder carbohydrate(int val) {
                carbohydrate = val;
                return this;
            }
    
            public Builder sodium(int val) {
                sodium = 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;
        }
        
        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return "["+
                    "servingSize:"+servingSize+
                    ",servings:"+servings+
                    ",calories:"+calories+
                    ",fat:"+fat+
                    ",sodium:"+sodium+
                    ",carbohydrate:"+carbohydrate+
                    "]";
        }
    
        public static void main(String[] args) {
            NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
                    .calories(100).sodium(35).carbohydrate(27).build();
            
            System.out.println(cocaCola);
        }
    }
  • 相关阅读:
    Cookies
    一个完整的upstart脚本分析
    squid总结
    python递归读取目录列表
    python删除文件
    ubuntu切割mp3文件
    TP-LINK TL-WN725N V2 / rtl8188eu Linux驱动安装
    ubuntu启动脚本
    su对环境变量做了什么
    sudoers文件配置
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2538496.html
Copyright © 2011-2022 走看看