Reading

"读书笔记(不断收集整理中...)"

Posted by Ariescat from January 15, 2021 - ?


已弃用!! 最新版本已迁移至:Effective Java · Awesome (ariescat.top)



Effective Java

第四章 类和接口

第17条:使可变性最小化
  • 不可变对象本质上是线程安全的,它们不要求同步。
  • BigInteger和BitSet
  • BigInteger和BigDecimal:BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
第18条:复合优先于继承
  • 只有当两者之间确实存在“ is-a ”关系的时候,类B才应该扩展类A,否则B 应该包含

    A的一个私有实例,并且暴露一个较小的、较简单的 API。

    JDK中如Stack<E> extends Vector<E>Properties extends Hashtable<Object,Object>都违反该原则,采用复合更优。

设计模式之美

01 为什么要尽早地学习并掌握设计模式相关知识

我理解的设计模式主要功能是:解耦和扩展

02 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。这也是一个编程老手跟编程新手的本质区别之一。

03 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

贫血模型和充血模型

08 | 理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?

抽象:表示一种is-a的关系,为了解决代码复用问题;这是一种自下而上的设计思路,现有子类代码重复复,再提取;

接口:表示一种 has-a 的关系,为了解决抽象而非代码复用问题;这是一种自上而下的设计思路,先设计接口,再去考虑具体的实现;

10 | 理论七:为何说要多用组合少用继承?如何决定该用组合还是继承?

继承最大问题:

继承层次过深,继承关系过于复杂带来的代码可读性和可维护性。

比如“鸟”:会不会飞,会不会叫,会不会下蛋

但:组合并不是完美的,继承也并非一无是处

12 | 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

Repository 的 Entity,即便它被设计成贫血模型,违反面向对象编程的封装特性,但 Entity 的生命周期是有限的。一般,它传递到 Service 后,就会转化成 Bo 或者 Domain 来继续后面的业务逻辑。其生命周期到此就结束了,并不会被到处任意修改。Controller层的 Vo 单纯作为一种 DTO,亦是如此。

13 | 实战二(上):如何对接口鉴权这样一个功能开发做面向对象分析?

OAuth:调用方将接口的URL和Apple、密码拼接在一起,然后进行加密,生成一个token。

OAuth2?

17 | 理论三:里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?

里式替换原则(design by contract,按照协议来设计):父类定义了函数的“约定(或协议)”,子类可以改变函数的实现逻辑,但不能改变函数原有的“约定”。如对函数输入、输出、异常的约定,注释中所罗列的特殊说明等。

公众号

《码农翻身》

操作系统就是一个“死循环”!


喜迎
春节