代码的坏味道-封装思想

常见的代码:当你必须得先了解一个类的细节,才能写出代码时,这只能说明一件事,这个封装是失败的

//过长的消息链
String name = book.getAuthor().getName();
//隐藏委托关系,将调用封装起来
class Book {
  ...
  public String getAuthorName() {
    return this.author.getName();
  }
  ...
}


String name = book.getAuthorName();

基本类型偏执问题

//虽然价格本身是用浮点数在存储,但价格和浮点数本身并不是同一个概念,有着不同的行为需求。比如,
//一般情况下,我们要求商品价格是大于 0 的,但 double 类型本身是没有这种限制的
public double getEpubPrice(final boolean highQuality, final int chapterSequence) {
  ...
}

//这种较验就得各个地方都得写了
if (price <= 0) {
  throw new IllegalArgumentException("Price should be positive");
}
//采用以对象取代基本数据类型,将较验放在对象初始化的时候进行
class Price {
  private long price;
  
  public Price(final double price) {
    if (price <= 0) {
      throw new IllegalArgumentException("Price should be positive");
    }
    
    this.price = price;
  }
}

学习于https://time.geekbang.org/column/article/333135

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值