博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective Java记录2:遇到多个构造器考虑用构建器(Builder)
阅读量:4029 次
发布时间:2019-05-24

本文共 1484 字,大约阅读时间需要 4 分钟。

      实例化对象时,构造器的自变量有时候会不定,即有有多个可选参数时,可重载构造器,但是有时候在问题模型中,某种类型的构造器是后期出现的,随着情况的不同,可能会添加多个构造器,这时候,代码很难维护。同时,客户端调用时,不便于阅读和使用(重载太多)

     替代方案一:JavaBean模式

调用无参数构造函数,然后通过setter方法设置必要的参数。但是可能的缺点:由可能存在的JavaBean状态不一致导致的线程安全问题。

     替代方案二:Builder模式

实例代码

package com.xl.chap1;public class BuilderMain {	// 必须的字段	private final int servingSize;	private final int servings;	// 可选字段	private int calories = 0;	private int fat = 0;	private int carbohyrate = 0;	private int sodium = 0;	public BuilderMain(Builder builder) {		// 运行期初始化常量		this.servingSize = builder.servingSize;		this.servings = builder.servings;		this.calories = builder.calories;		this.fat = builder.fat;		this.carbohyrate = builder.carbohyrate;		this.sodium = builder.sodium;	}	public static class Builder {		private final int servingSize;		private final int servings;		private int calories = 0;		private int fat = 0;		private int carbohyrate = 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 carbohydrate(int val) {			carbohyrate = val;			return this;		}		public Builder sodium(int val) {			sodium = val;			return this;		}		public BuilderMain build() {			return new BuilderMain(this);		}	}	public static void main(String[] args) {		BuilderMain bm = new BuilderMain.Builder(240, 8).calories(100)				.sodium(35).carbohydrate(27).build();	}}
当构造器参数可选时,可考虑采用Builder模式来处理。

 

转载地址:http://crlbi.baihongyu.com/

你可能感兴趣的文章
linux安装usb wifi接收器
查看>>
关于共享单车定位不准问题
查看>>
终于搞定CString和string之间转换的问题了
查看>>
用防火墙自动拦截攻击IP
查看>>
补充自动屏蔽攻击ip
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
CLOSE_WAIT和TIME_WAIT
查看>>
在C++中使用Lua
查看>>
在Dll中调用自身的位图资源
查看>>
IP校验和详解
查看>>