构建器

本文介绍了一种使用Java实现的营养成分类NutritionFacts,该类采用构建器模式来简化实例化过程,尤其适用于拥有多个可选参数的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.roykw.builder;

/**
 * 营养成分类
 * 
 * 构建器适用的情况如下:
 *   构造器或者静态工厂有多个参数,特别是当大多数的参数是可选的时候
 * 
 * @author Dr.King
 */
public class NutritionFacts {
	
	//required
	private int totalServingSize; //总份量(required)
	private int perServingSize;   //每份的份量(required)
	
	//option
	private int calories;
	private int fat;
	private int sodium;
	private int carbohydrate;
	
	
	
	public int getTotalServingSize() {
		return totalServingSize;
	}

	public void setTotalServingSize(int totalServingSize) {
		this.totalServingSize = totalServingSize;
	}

	public int getPerServingSize() {
		return perServingSize;
	}

	public void setPerServingSize(int perServingSize) {
		this.perServingSize = perServingSize;
	}

	public int getCalories() {
		return calories;
	}

	public void setCalories(int calories) {
		this.calories = calories;
	}

	public int getFat() {
		return fat;
	}

	public void setFat(int fat) {
		this.fat = fat;
	}

	public int getSodium() {
		return sodium;
	}

	public void setSodium(int sodium) {
		this.sodium = sodium;
	}

	public int getCarbohydrate() {
		return carbohydrate;
	}

	public void setCarbohydrate(int carbohydrate) {
		this.carbohydrate = carbohydrate;
	}

	public NutritionFacts(NFBuilder builder){
		this.totalServingSize = builder.totalServingSize;
		this.perServingSize = builder.perServingSize;
		this.calories = builder.calories;
		this.fat = builder.fat;
		this.sodium = builder.sodium;
		this.carbohydrate = builder.carbohydrate;
	}
	
	/**
	 * 实现构建器
	 * @author Dr.King
	 */
	public static class NFBuilder implements Builder<NutritionFacts>{
		
		//required
		private int totalServingSize; //总份量(required)
		private int perServingSize;   //每份的份量(required)
		
		//option
		private int calories = 0;
		private int fat = 0;
		private int sodium = 0;
		private int carbohydrate = 0;
		
		public NFBuilder(int tSize,int pSize){
			this.totalServingSize = tSize;
			this.perServingSize = pSize;
		}
		
		public NFBuilder calories(int c){
			this.calories = c;
			return this;
		}
		public NFBuilder fat(int f){
			this.fat = f;
			return this;
		}
		public NFBuilder sodium(int s){
			this.sodium = s;
			return this;
		}
		public NFBuilder carbohydrate(int c){
			this.carbohydrate = c;
			return this;
		}
		
		@Override
		public NutritionFacts build() {
			return new NutritionFacts(this);
		}
	}
	
	public static void main(String[] args) {
		NutritionFacts nutritionFacts = new NutritionFacts.NFBuilder(100, 10).calories(100).carbohydrate(200).build();
		System.out.println("carbohydrate:" + nutritionFacts.getCarbohydrate());
	}
}

builder接口如下:

package com.roykw.builder;

/**
 * 构建者
 * @author Dr.King
 * @param <T>
 */
public interface Builder<T> {
	
	/**
	 * 得到T
	 * @return T
	 */
	public T build();
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值