java build 模式_Java Builder 模式,你搞懂了么?

前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okHttp 打开源码一看,纳尼?Builder 模式随处可见,于是乎,这篇文章就来对 Builder 模式进行一个简单总结,主要针对便于分析 android 相关源码,以实际应用出发~在 oop 编码设计中,我们有...
摘要由CSDN通过智能技术生成

8ecd608b062f8e032069149e817f8bbc.png

前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okHttp 打开源码一看,纳尼?Builder 模式随处可见,于是乎,这篇文章就来对 Builder 模式进行一个简单总结,主要针对便于分析 android 相关源码,以实际应用出发~

在 oop 编码设计中,我们有句经典的话叫做 "万物皆对象".实际开发中,我们只要能拿到类的实例,即对象。就可以开始搞事情啦,可以命令对象去做一些事情,当然啦~每个对象的能力都是不同的,能做的事情也是不同。对象中存储着类的成员属性(成员变量和成员方法)。我们命令对象去为我们工作,其实就是调用对象特有的属性。刚刚我们也说了,每个对象的能力是不同的,对象所能做的事情,在一开始被创建的时候就决定了。下面先来说一下对象的构建方法。

一、通过构造器构建

假设一个场景:我们用一个class来表示车,车有一些必需的属性,比如:车身,轮胎,发动机,方向盘等。也有一些可选属性,假设超过10个,比如:车上的一些装饰,安全气囊等等非常多的属性。

如果我们用构造器来构造对象,我们的做法是 提供第一个包含4个必需属性的构造器,接下来再按可选属性依次重载不同的构造器,这样是可行的,但是会有以下一些问题:

一旦属性非常多,需要重载n多个构造器,而且各种构造器的组成都是在特定需求的情况下制定的,代码量多了不说,灵活性大大下降

客户端调用构造器的时候,需要传的属性非常多,可能导致调用困难,我们需要去熟悉每个特定构造器所提供的属性是什么样的,而参数属性多的情况下,我们可能因为疏忽而传错顺序。

public class Car {

/**

* 必需属性

*/

private String carBody;//车身

private String tyre;//轮胎

private String engine;//发动机

private String aimingCircle;//方向盘

/**

* 可选属性

*/

private String decoration;//车内装饰品

/**

* 必需属性构造器

*

* @param carBody

* @param tyre

* @param engine

*/

public Car(String carBody, String tyre, String engine) {

this.carBody = carBody;

this.tyre = tyre;

this.engine = engine;

}

/**

* 假如我们需要再添加车内装饰品,即在原来构造器基础上再重载一个构造器

*

* @param carBody

* @param tyre

* @param engine

* @param aimingCircle

* @param decoration

*/

public Car(String carBody, String tyre, String engine, String aimingCircle, String decoration) {

this.carBody = carBody;

this.tyre = tyre;

this.engine = engine;

this.aimingCircle = aimingCircle;

this.decoration = decoration;

}

}

二、JavaBeans模式构建

提供无参的构造函数,暴露一些公共的方法让用户自己去设置对象属性,这种方法较之第一种似乎增强了灵活度,用户可以根据自己的需要随意去设置属性。但是这种方法自身存在严重的缺点:

因为构造过程被分到了几个调用中,在构造中 JavaBean 可能处于不一致的状态。类无法仅仅通过判断构造器参数的有效性来保证一致性。还有一个严重的弊端是,JavaBeans 模式阻止了把类做成不可变的可能。&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值