OCP :开闭原则
重点理论:
- 单纯的 interface 可以统一方法的调用,但是它不能统一对象的实例化
- 面向对象: 实例化对象 调用方法
- 只有一段代码中没有 new 的出现,才能保持代码的相对稳定,才能逐步实现 OCP,实质就是一段代码如果要保持稳定,就不应该负责对象的实例化
- 面向对象编程,对象实例化是不可能消除的
- 把对象的实例化过程,转移到其他的代码片段中
- 代码中总是存在不稳定,隔离这些不稳定,保证其他的代码是稳定的
- 变化造成了不稳定
- 反射+工厂模式可以统一对象的实例化
抽象的难点在于 new
工厂模式(分离对象的实例化)
- 简单工厂模式
- 普通工厂模式
- 抽象工厂模式
因为我们是面向对象编程,当业务或者用户的输入发生变化的时候,我们必须创建不同的对象去响应操作,这也就是只要是一段代码出现了 new 就是不稳定的原因。
类、对象、元类的关系
- 类 是对象的抽象
- 元类 是对类的描述
软件中的两大类的变化
- 用户输入的变化
- 需求的变化
改动配置文件算不算符合 OCP ?
- 配置文件是系统外部的,而不是代码本身
IOC、DI、DIP 是什么?
DIP(Dependency Inversion Principle):依赖倒置
- 高层模块不应该依赖底层模块,两者都应该依赖抽象
- 高层:抽象
- 底层:具体实现
- 抽象不应该依赖细节
- 细节应该依赖抽象
DI(Dependency Injection):依赖注入
依赖注入方式
- 属性注入(setter)
- 构造注入
- 接口注入
IOC
IOC 具体实现
- 对象能加入到容器中
- 在容器中的对象能够注入到代码中
IOC 抽象意义
把控制权交给用户 目的:灵活的 OCP