zoukankan      html  css  js  c++  java
  • Effective JAVA 创建和销毁对象 遇到多参构造器考虑使用构建器

    //构建器抽象类,为不同类的实现提供
    public interface Builder<T> {
        public T build();
    }
    
    /**
     * @描述: 营养表
     */
    public class NutritionFacts {
        private final int servingSize;// required
        private final int servings;// required
        private final int calories;// optional
        private final int fat;// optional
        private final int sodium;// optional
        private final int carbohydrate;// optional
    
        public static class Builder1 implements Builder<NutritionFacts>{
            private final int servingSize;// required 食用分量
            private final int servings;// required (食品等的)一份
            private int calories;// optional 卡路里 
            private int fat;// optional
            private int sodium;// optional 钠
            private int carbohydrate;// optional 碳水化合物;糖类
            public Builder1(int servingSize,int servings){
                this.servingSize = servingSize;
                this.servings = servings;
            }
            public Builder1 calories(int calories) {
                this.calories = calories;
                return this;
            }
            public Builder1 fat(int fat) {
                this.fat = fat;
                return this;
            }
            public Builder1 sodium(int sodium) {
                this.sodium = sodium;
                return this;
            }
            public Builder1 carbohydrate(int carbohydrate) {
                this.carbohydrate = carbohydrate;
                return this;
            }
            @Override
            public NutritionFacts build() {
                return new NutritionFacts(this);
            }
            
        }
        
        private NutritionFacts(Builder1 builder){
            this.servingSize = builder.servingSize;
            this.servings = builder.servings;
            this.calories = builder.calories;
            this.fat = builder.fat;
            this.sodium = builder.sodium;
            this.carbohydrate = builder.carbohydrate;
        }
        
        public static void main(String[] args) {
            NutritionFacts cocacola = new NutritionFacts.Builder1(240, 80).calories(100).sodium(35).carbohydrate(27).build();
        }
    }
    为非必须参数设置值,返回Build自身可以把调用链接起来
    好处:
    1、可以用单个builder创建多个对象,builder的参数可以在创建对象期间调整,可以随着对象不同而改变。builder可以自动填充某些域,例如每次创建对象时自动增加序号。
    2、这是一个很好的抽象工厂(abstract factory)。客户端只要将这样一个builder传给方法,该方法能为客户端创建一个或多个对象。
    一个通用类型的bulider
    public interface Builder<T>{
      public T build();  
    }
  • 相关阅读:
    Linux性能监控
    程序员技术练级攻略
    使用 GDB 调试多进程程序
    nginx下面部署fast-cgi和C++【原】
    ROS Learning-024 (提高篇-002) rviz的安装和使用
    ROS Learning-023 (提高篇-001) 准备工作 --- 安装一些必要的软件包
    STM32 C++编程 005 I2c(Soft)类
    Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫
    设置 PyCharm 软件中 Terminal 窗口 中启动的 python 交互命令的版本
    在PyCharm 软件中设置你的项目 使用的Python版本
  • 原文地址:https://www.cnblogs.com/sallet/p/4431933.html
Copyright © 2011-2022 走看看