`
aqxyjay
  • 浏览: 4200 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

EJ.02 遇到多个构造器参数时要考虑用构建器

    博客分类:
  • EJ
阅读更多
  • 重叠构造器(telescoping constructor)模式 —— 代码复杂,阅读困难

示例代码: 

// Telescoping constructor pattern - does not scale well!
public class NutritionFacts {
	private final int servingSize;	// (ml)			required
	private final int servings;	// (per container)	required
	private final int calories;	//			optional
	private final int fat;		// (g)			optional
	private final int sodium;	// (mg)			optional
	private final int carbohydrate; // (g)			optional
	
	public NutritionFacts(int servingSize, int servings) {
		this(servingSize, servings, 0);
	}

	public NutritionFacts(int servingSize, int servings, int calories) {
		this(servingSize, servings, calories, 0);
	}

	public NutritionFacts(int servingSize, int servings, int calories, int fat) {
		this(servingSize, servings, calories, fat, 0);
	}

	public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
		this(servingSize, servings, calories, fat, sodium, 0);
	}

	public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
		this.servingSize = servingSize;
		this.servings = servings;
		this.calories = calories;
		this.fat = fat;
		this.sodium = sodium;
		this.carbohydrate = carbohydrate;
	}
}
public class Client {
	public static void main(String[] args) {
		NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27);
	}
}

 

 

  • JavaBean模式 —— 线程不安全,类可变

示例代码:

// JavaBean Pattern - allows inconsistency, mandates mutability
public class NutritionFacts {
	// Parameters initialized to default values (if any)
	private int servingSize  = -1; // Required; no default value
	private int servings     = -1;
	private int calories     = 0;
	private int fat	      = 0;
	private int sodium       = 0;
	private int carbohydrate = 0;
	
	public NutritionFacts() {
	}

	// Setters
	public void setServingSize(int servingSize) {
		this.servingSize = servingSize;
	}

	public void setServings(int servings) {
		this.servings = servings;
	}

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

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

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

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

 

public class Client {
	public static void main(String[] args) {
		NutritionFacts cocaCola = new NutritionFacts();
		cocaCola.setServingSize(240);
		cocaCola.setServings(8);
		cocaCola.setCalories(100);
		cocaCola.setSodium(35);
		cocaCola.setCarbohydrate(27);
	}
}

 

  • 构建器模式 —— 适应多参数,安全,方便编写,可维护性高,开销大

示例代码:

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 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;
		}

		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;
		//对象域抛出异常
		if(this.fat>this.sodium){
		    throw new IllegalArgumentException("The fat must be little than sodium!!");
		}
	}
}

 

public class Client {
	public static void main(String[] args) {
		NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
				.calories(100).sodium(35).carbohydrate(27).build();
	}
}

 

 

分享到:
评论

相关推荐

    EJ1+CP1H无协议(Modbus-RTU)读PV写SP.rar_cp1h无协议通信_modbus RTU

    标题 "EJ1+CP1H无协议(Modbus-RTU)读PV写SP.rar" 暗示了这是一个关于使用Modbus-RTU协议与EJ1和CP1H系列PLC进行通信的教程或示例代码集合。描述中的 "MODBUS RTU通讯程序,通用串行口读写程序" 确认了这一点,说明...

    Apache:Apache安全配置:Apache错误页面自定义与安全处理.pdf

    Apache:Apache安全配置:Apache错误页面自定义与安全处理.pdf

    基于stf改的web群控安卓系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料具可复制性不支持退款,勿用于商业用途。质量优质,放心下载使用。

    【9477】基于springboot+vue的技术的农业设备租赁系统.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【数据库】:mysql 5.7+ 资源包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    ssm校园商铺系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料具可复制性不支持退款,勿用于商业用途。质量优质,放心下载使用。

    OFDM系统降低PAPR算法(PTS、SLM与C变换技术)MATLAB仿真代码实现及性能评估,OFDM系统降低PAPR算法(PTS、SLM与C变换技术)完美运行MATLAB仿真代码,ofdm系统降低P

    OFDM系统降低PAPR算法(PTS、SLM与C变换技术)MATLAB仿真代码实现及性能评估,OFDM系统降低PAPR算法(PTS、SLM与C变换技术)完美运行MATLAB仿真代码,ofdm系统降低PAPR代码,可完美运行。 降低OFDM系统PAPR算法(PTS-SLM-C变)MATLAB仿真(有PTS、SLM、C变三种算法的CCDF仿真) 直接拿即可 仿真软件版本: matlab2012a ,ofdm系统; 降低PAPR代码; PTS算法; SLM算法; C变换算法; MATLAB仿真; CCDF仿真; matlab2012a,OFDM系统PAPR降低:PTS、SLM与C变换算法的MATLAB仿真研究

    线电压级联型多重化PWM变换器:一体化等效电路控制策略及性能分析,线电压级联型多重化PWM变换器:一体化等效电路控制策略与性能分析,线电压级联型多重化 PWM 变器是一种以传统 两电平六开关 PWM

    线电压级联型多重化PWM变换器:一体化等效电路控制策略及性能分析,线电压级联型多重化PWM变换器:一体化等效电路控制策略与性能分析,线电压级联型多重化 PWM 变器是一种以传统 两电平六开关 PWM 电压源型变器(Voltage Source Converter,简称 VSC)为组成单元的多重化变器,即线电压级联型功率变器(Line-voltage Cascaded VSC,简称 LVC-VSC)。 该种变器不仅继承了传统级联 H 桥型变器的优点,而且在构成三相电力系统时,所需隔离直流电源较少,且便于引入三相系统中的控制策略。 针对一种线电压级联型多重化功率变器为研究对象,以其作为网侧变器为例,提出一种基于一体化等效电路的控制方法。 仿真结果表明,所提出的控制策略不仅具有较好的动稳态性能,而且具有结构简单,易于设计实现等优点。 ,核心关键词: 线电压级联型多重化PWM变换器; 传统两电平六开关PWM电压源型变换器; LVC-VSC; 网侧变换器; 控刓方法; 仿真结果。,基于级联多重化PWM的线电压型VSC变换器及其控制策略研究

    图像识别,LaMa、Inpaint-Anything,大模型训练用的素材,sttn.pth

    图像识别,LaMa、Inpaint-Anything,大模型训练用的素材,sttn.pth。搞图像识别,一键去除图片中的人、物的都用这个

    C语言是一门经典的编程语言,入门到精通的步骤

    C语言是一门经典的编程语言,入门到精通的步骤。

    【9487】基于springboot+vue的城市垃圾分类管理系统--lw.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【数据库】:mysql 5.7+ 资源包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    基于QT交互与opencv制作的图片效果编辑器.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料具可复制性不支持退款,勿用于商业用途。质量优质,放心下载使用。

    STM32电机速度控制与L298N驱动器的模糊PID算法:板载显示与Labview上位机监控,串口通信与按键控制,STM32电机速度控制与L298N驱动器的PID及模糊PID算法实现,板载屏与Labv

    STM32电机速度控制与L298N驱动器的模糊PID算法:板载显示与Labview上位机监控,串口通信与按键控制,STM32电机速度控制与L298N驱动器的PID及模糊PID算法实现,板载屏与Labview上位机显示转速,串口通信与数据收发功能,按键控制加减速及算法切换,STM32电机速度控制、L298N电机驱动、板载屏幕显示转速、上位机Labview显示电机转速、串口数据收发、控制算法PID、模糊PID。 按键加减速,按键切控制算法。 1.下位机单片机程序:(送Matlab的s函数PID模糊PID仿真模型) 2.上位机Labview软件 ,核心关键词: STM32电机速度控制; L298N电机驱动; 板载屏幕显示转速; 串口数据收发; 控制算法PID; 模糊PID; 下位机单片机程序; 上位机Labview软件; 按键加减速; 按键切换控制算法。,基于STM32的电机速度控制与算法切换系统

    IT运维管理中变更控制程序详解 - 规范企业IT变更流程确保系统稳定运营

    内容概要:本文档详细阐述了适用于公司的IT运维项目的变更管理控制程序,旨在保证变更在受控情况下评估、批准和实施。主要内容分为目的、适用范围、职责定义、工作程序和其他相关信息五大部分。工作程序详细描述三种类型的变更管理过程——标准变更、一般变更以及紧急变更,每种都经过变更请求、申请审批、实施及完成、回顾和归档四个主要阶段,还涉及变更管理和其他管理流程之间的关系和关键绩效指标。 适合人群:企业运维管理人员和技术团队、IT服务提供商及其他从事IT运维领域的工作人员。 使用场景及目标:帮助企业和IT机构建立系统的变更管理制度,规范各种变更流程,明确每个阶段的任务分配和职责权限,保障IT环境安全性、稳定性与可靠性的同时提高工作效率和服务质量。 其他说明:文中还介绍了配置管理员、运维经理在内的角色划分及其具体的工作职责,同时列出了如变更成功率这样的重要KPI来衡量变更效果,提供实际工作中所需的各种表格样例,如变更请求申请表等以供下载和模板参考。

    Apache:Apache模块:Apache模块的性能监控与分析.pdf

    Apache:Apache模块:Apache模块的性能监控与分析.pdf

    光热电站最优容量配置方法代码:以综合成本为目标,采用Cplex求解器的高效解决方案 (独家编写,灵活可改写),光热电站容量配置方法代码详解:以综合成本为目标,采用Cplex求解器的高效解决方案,光热电

    光热电站最优容量配置方法代码:以综合成本为目标,采用Cplex求解器的高效解决方案 (独家编写,灵活可改写),光热电站容量配置方法代码详解:以综合成本为目标,采用Cplex求解器的高效解决方案,光热电站容量配置方法代码 复现图中文献 以综合成本为目标采用cplex求解器求解 本人亲自编写,市面唯一,可改写性强 ,光热电站;容量配置方法;复现文献;Cplex求解器;综合成本;唯一编写。,基于Cplex求解器的光热电站综合成本优化配置代码研究

    IT运维领域的知识管理系统-ITSS标准知识库的建设与维护

    内容概要:该文档围绕构建和维护IT运维知识库的具体实施方案进行了详细描述。首先明确了该系统的目的在于对企业运维工作的知识、经验进行统一高效的管理,以优化效率并保障质量的同时降低成本;接着定义了这一制度适用的人群为公司内部以及外部涉及知识分享与交流的所有部门;还阐述了各个参与方所承担的责任,强调了运维部门作为主导,在资料搜集、存档及更新等环节的重要地位。文中着重讲述了工作流程方面的规则,涵盖从初始建设直至后续知识管理(积累、交流),再到具体流程管理(发布、更新、删除),最后列明所需关联的相关文件和支持材料记录。这为运维人员提供了标准化的操作指南,确保知识能够被高效地管理和运用。 适用人群:适用于公司内部与外部涉及到知识传递的各个群体,尤其是IT运营和维护团队。 使用场景及目标:旨在提供一整套关于企业级 ITSS 规范下知识资产的创建、传播与更新的方法论;帮助组织内的成员更加容易地访问既有经验和专业知识;减少由于信息不对称所带来的错误,促进业务的发展和技术的进步。 其他说明:本文为运维工作制定了标准化的知识管理体系,不仅提高了企业对内对外的服务水平,同时也加强了数据安全性和规范性。

    万能嗅探资源下载安装包

    万能嗅探资源下载安装包

    智慧园区综合安防集成系统解决方案Word(359页).docx

    智慧园区安防综合管理平台,作为现代园区管理的核心支撑,正引领着园区管理向智慧化、高效化转型。该平台借助云计算、物联网、大数据等前沿技术,实现了园区内消防、技防、卡口、楼宇管理等子系统的有效统筹与融合,打破了信息孤岛,实现了资源的共享与协同。通过统一的管理平台,用户可以轻松实现对视频监控、人脸识别、消防预警、车辆管理等系统的综合监控与协调,大大提升了管理效率与应急响应速度。 在功能设计上,平台不仅提供了安全管理可视化数据视图、GIS地图应用等直观、便捷的管理工具,还融入了全景可视指挥、AR增强现实等高科技元素,使得园区的安防管理更加智能化、精细化。例如,通过全景摄像机对监控范围进行全景覆盖,结合AI智能识别技术,平台能够实现对目标的全方位监控与预警,有效提升了安防管理的效率与准确性。同时,平台还支持智能预案的设置,能够根据告警信息自动触发相应的响应措施,如声光告警、视频自动弹出等,进一步增强了园区的安全保障能力。 此外,智慧园区安防综合管理平台还注重数据的挖掘与应用,通过数据分析与挖掘技术,平台能够为园区管理者提供决策支持,帮助管理者更好地了解园区的运营状况,优化管理流程,提升服务质量。随着技术的不断进步和应用场景的不断拓展,智慧园区安防综合管理平台将为园区的可持续发展注入新的活力,为城市居民带来更加安全、便捷、智能的生活体验。

    jdbc spingmvc jdk8 jsp mysql 美妆护肤品测评平台.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料具可复制性不支持退款,勿用于商业用途。质量优质,放心下载使用。

Global site tag (gtag.js) - Google Analytics