Head First Design Pattern(📎深入浅出设计模式(中文版).pdf)
DRY Don't Repeat Yourself
更注重功能的不重复而不仅仅是代码的重复
封装经常修改的代码 Encapsulate What Changes
封装并且逐步开放权限
优先组合非继承 Favor Composition over Inheritance
组合灵活性很高
运行时通过设置属性修改一个类的行为
通过使用多态 接口的形式实现类之间的组合关系 为修改组合关系提供灵活性
接口为中心编程(并非实现对象)
接口的实现 兼容现有代码结构
返回值尽量用接口
代理原则
equals hashcode
让用于比较的类本身完成对比工作而非它们的调用方
没有重复编码而且很容易修改类的行为
SOLID
OOPS编程核心 高内聚 低耦合
SRP | 单一责任原则 |
OCP | 开放封闭原则 |
LSP | 里氏替换原则 |
ISP | 接口隔离原则 |
DIP | 依赖倒置原则 |
S
单一职责原则Single Responsibility Principle(SRP)
SOLID中的s
打破耦合关系需要重新测试
O
开闭原则 OpenClosed Design Principle
SOLID中的o
扩展开放 修改闭合
重新
L
里式替换原则 Liskov Substitution Principle LSP
SOLID中的L
父类出现的地方可以用子类代替
与单一职责原则 接口隔离原则密切相关
派生类或子类相较于父类应增强功能
I
接口隔离原则 Interface Segregation Principle
接口拆分 单一接口 更少的方法
D
依赖注入/翻转原则 Dependency Injection or Inversion principle
SOLID中的D
Spring中的DI
任何一个类都易于用模拟对象进行测试
更易于维护 创建对象的代码集中且和客户端代码是隔离的
实现方式: 字节码工具 AOP(面向切面编程)框架 切入点表达式 Spring中的代理
规范
- 命名:利用名字来解释变量、函数等的目的。
- 封装函数:将一些特定功能的代码封装成一个函数以明确目的。
- 引入变量:将表达式插入至专用变量。
- 类和模块接口:将类和模块中的函数暴露出来,让代码更加清晰。
- 代码分组:用组来区分不同的代码片段。
- 重命名函数
-
- 避免使用含糊的字眼
- 使用主动动词,以表示函数主动执行。指定返回值类型。强类型的语言也可以用类型标识符来表明函数的返回值类型。
- 指定单位——如果里面有数值参数,那可以加上其单位。
- 将代码封装成函数
- 重命名变量
-
- 用函数代替条件表达式
- 用变量代替表达式
- 用变量代替方程式
- 重命名常量
-
- 如果代码里面有一些特殊值,那最好给它们命名
- 制定规则:
-
- 最好遵循相同的命名规则。这样阅读的人就能在参考其他代码的基础上正确猜测出各种事物的含义