所谓的 OO设计原则的目的 是 1. Extensibility;2. Flexibility;3. Pluggability
1. 最小职责 原则:一个类做一个职责(角色);SRP
2. 里氏替换原则:子类不能改变 父类的 契约,即 子类不能override 父类的方法, 可以有条件 overload;输入参数更宽松, 返回参数 更严格;LSP
3. 依赖倒置原则:面向接口,所有的 底层类和高层类(具体业务逻辑)都依赖上层的 接口定义;DIP
4. 最小接口原则: 接口或抽象类的 定义 要 包含尽量少的 方法声明;ISP
5. 迪米特原则:对依赖的对象了解尽量少的信息;通过中间层的 对象了解;
6. 组合/聚合原则:多用组合,少用继承;因为 组合可用更灵活的“复用”对象所属类的 代码,并且可用在runtime(运行时)动态改变对象的行为; 使用继承则子类全盘接受 父类的 方法实现(遵守里氏替换原则),并且无法运行时动态改变方法实现;所以 需要 “封装变化”,再 组合之; strategy 模式 很好的体现了这个原则;
7. 开闭原则:软件代码(类级别)对修改关闭,对扩展开放;这个是理论上的;OCP
实际的设计/开发过程应该是: 先做领域模型,理解业务上要做什么事情,期望拿到什么价值;这个阶段切忌思考 如何抽象接口/类,如何设计类; 第二 考虑 设计层面有哪些需要抽象,有哪些依赖,具体方法接口如何设计; 最后才考虑 用哪种模式,那个包来实现;
网友评论