Java优化考虑构建器创建对象
来源:互联网 发布:原生js 实现swipe效果 编辑:程序博客网 时间:2024/06/14 00:22
最近在做项目的时候,需要新建一个对象叫CartMessage。CartMessage只作为方法参数,如果要构建一个CartMessage,没有重构之前的做法是类似这样的:
CartMessage msg = new CartMessage();msg.setA();msg.setB();msg.setC();...helpCartService.sendMsgToWebSocket(msg);
发现用set的方法比较累赘,占用多行,写起来不简洁。忽略想去Java Effecttive书中关于构建对象的建议。想起了构建器方式。首先在CartMessage中加入Builder构建器:
public static class Builder{ private CartMessage cartMessage; public Builder(){ cartMessage = new CartMessage(); } public Builder entityId(String entityId){ cartMessage.setEntityId(entityId); return this; } public Builder seatCode(String seatCode){ cartMessage.setSeatCode(seatCode); return this; } public Builder customerId(String customerId){ cartMessage.setCustomerRegisterId(customerId); return this; } public Builder orderId(String orderId){ cartMessage.setOrderId(orderId); return this; } public CartMessage build(){ return cartMessage; } }
重构之后,只要一行代码就行了,而且清晰明了:
helpCartService.sendMsgToWebSocket(new CartMessage.Builder(). entityId(entityId).seatCode(seatCode).customerId(customerRegisterId).orderId(orderId).build());
构建器有很多变形,灵活多变,例如zookeeper客户端Curator中client的创建也是用构建器:
static CuratorFramework client = CuratorFrameworkFactory.builder() .connectString("localhost:2181") .sessionTimeoutMs(5000) .retryPolicy(retryPolicy) .build();
builder()是个静态方法,返回一个构建器:
public static Builder builder() { return new Builder(); }
构建器如下:
public static class Builder { private EnsembleProvider ensembleProvider; private int sessionTimeoutMs = DEFAULT_SESSION_TIMEOUT_MS; private int connectionTimeoutMs = DEFAULT_CONNECTION_TIMEOUT_MS; private int maxCloseWaitMs = DEFAULT_CLOSE_WAIT_MS; private RetryPolicy retryPolicy; private ThreadFactory threadFactory = null; private String namespace; private List<AuthInfo> authInfos = null; private byte[] defaultData = LOCAL_ADDRESS; private CompressionProvider compressionProvider = DEFAULT_COMPRESSION_PROVIDER; private ZookeeperFactory zookeeperFactory = DEFAULT_ZOOKEEPER_FACTORY; private ACLProvider aclProvider = DEFAULT_ACL_PROVIDER; private boolean canBeReadOnly = false; /** * Apply the current values and build a new CuratorFramework * * @return new CuratorFramework */ public CuratorFramework build() { return new CuratorFrameworkImpl(this); } /** * Apply the current values and build a new temporary CuratorFramework. Temporary * CuratorFramework instances are meant for single requests to ZooKeeper ensembles * over a failure prone network such as a WAN. The APIs available from {@link CuratorTempFramework} * are limited. Further, the connection will be closed after 3 minutes of inactivity. * * @return temp instance */ public CuratorTempFramework buildTemp() { return buildTemp(DEFAULT_INACTIVE_THRESHOLD_MS, TimeUnit.MILLISECONDS); }...
可以看出builder有很多构建方式,如buildTemp()构建临时对象,build()创建了一个实现类等。有兴趣的话自己可以看看源码。
1 0
- Java优化考虑构建器创建对象
- Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器
- 创建销毁对象之遇到多个构造器参数时考虑用构建器(笔记)
- 创建对象的考虑
- 创建和销毁对象(2)——遇到多个构造器参数是要考虑用构建器
- 【Effective Java学习】创建和销毁对象--考虑用静态方法代替构造器
- Effective Java 创建和销毁对象 1.考虑用静态工厂方法代替构造器
- 第2条 创建和销毁对象——遇到多个构造器参数时要考虑用构建器
- Tip10 创建对象时需要考虑是否实现比较器
- java创建对象的优化:Builders模式
- 【Effective Java】Ch2_创建销毁对象:Item1_考虑用工厂方法替代构造函数
- 【Effective Java】Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder
- Effective Java第二条:遇到多个构造器参数时要考虑用构建器
- Effective Java (2) - 遇到多个构造器参数时要考虑用构建器
- Effective Java记录2:遇到多个构造器考虑用构建器(Builder)
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- Effective-Java学习笔记 遇到多个构造器参数时要考虑用构建器
- effective java(一)遇到多个构造器参数 时要考虑用构建器
- win8 重新装系统,始终无法从光盘启动或U盘启动问题
- windows核心编程 第1章 错误处理
- Android资源文件命名规则
- windows核心编程 第2章 字符和字符串处理
- windows核心编程 第3章 内核对象
- Java优化考虑构建器创建对象
- VS2010生成DLL问题
- 系统崩溃,PE系统也进不去
- 去除VS2010对汉字的拼写检查后留下的红色波浪线
- surfaceview 失去焦点后重新创建问题
- 174 php 延迟绑定 抽象类 self call_user_func_array
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Visual Studio 2008加载符号表导致调试缓慢
- 异步编程:When.js快速上手