Java优化考虑构建器创建对象
2016-06-06 11:29
344 查看
最近在做项目的时候,需要新建一个对象叫CartMessage。CartMessage只作为方法参数,如果要构建一个CartMessage,没有重构之前的做法是类似这样的:
发现用set的方法比较累赘,占用多行,写起来不简洁。忽略想去Java Effecttive书中关于构建对象的建议。想起了构建器方式。首先在CartMessage中加入Builder构建器:
重构之后,只要一行代码就行了,而且清晰明了:
构建器有很多变形,灵活多变,例如zookeeper客户端Curator中client的创建也是用构建器:
builder()是个静态方法,返回一个构建器:
构建器如下:
可以看出builder有很多构建方式,如buildTemp()构建临时对象,build()创建了一个实现类等。有兴趣的话自己可以看看源码。
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()创建了一个实现类等。有兴趣的话自己可以看看源码。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树