抽象的核心目的
抽象的主要目的是管理变化,具体来说:
- 识别变化点:确定哪些部分可能会变化
- 隔离变化:将变化限制在局部
- 统一接口:为不同的实现提供一致的交互方式
抽象的核心价值
在变化中寻求平衡稳定
- 稳定层:抽象定义“做什么”(接口/契约)
- 变化层:实现处理“怎么做”(具体细节)
SOLID原则
1. 单一职责原则
一个类应该只有一个引起它变化的原因
- 每个类应该只负责一项职责
- 将不同的功能分离到不同的类中
2. 开闭原则
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭
- 通过添加新代码开扩展功能,而不是修改现有代码
- 使用抽象来定义契约
3. 里氏替换原则
子类型必须能够替换其父类型而不影响程序的正确性。
- 子类应该扩展父类的行为,而不是改变它
- 子类不应该加强前置条件或削弱后置条件
- 子类不应该抛出父类不会抛出的异常
4. 接口隔离原则
客户端不应该被迫依赖他们不使用的接口
- 将大接口拆分为更小、更具体的接口
- 类不应该实现他们不需要的方法
5. 依赖倒置
高层模块 → 依赖 → 抽象接口 ← 实现 ← 低层模块