- 面向对象的设计原则
- 依赖倒置原则(DIP)
总的原则:依赖稳定的模块,不依赖变化的模块
稳定的高层模块依赖稳定的抽象,不依赖于变化的底层模块;
变化的实现细节依赖于稳定的抽象,稳定的抽象不依赖于变化的实现细节;
比方说:
高层模块:class MainForm
底层模块:class Line 和class Rect
抽象模块:class Shape 是底层模块的抽象
高层模块class MainForm不应该依赖变化的底层模块class Line和class Rect,应该依赖于稳定的抽象class Shape,从而达到隔离变化。 - 开放封闭原则(OCP)
开放表示类模块可扩展(可以增加新的类模块),封闭表示类模块不可修改(减少对已有的类模块的修改) - 单一职责原则(ISP)
一个类应该有一个可以引起它变化的原因 - Liskov替换原则(LSP)
子类必须能够替换它们的基类(is-a的关系) - 接口隔离原则
接口应小而完备,不强迫客户程序依赖它们不用的方法 - 优先使用对象组合,而不是类继承
类继承是白盒复用,对象组合是黑盒复用(减少耦合度);
继承破坏封装,父子类耦合度高 - 封装变化点(分界层)
- 针对接口编程,而不是针对实现编程
高内聚,松耦合,面向接口设计—接口标准化
-
专业术语
1)设计习语Design Idioms,编程语言相关的底层模式和技巧
2)设计模式Design patterns 类与相互通信的对象之间的组织关系(角色职责和协作方式)
3)架构模式Architectural patterns 系统中与基本结构组织关系密切的高层模式、子系统划分、职责、如何组织它们之间的规则。
4)Refactoring to Patterns 重构获得模式(重构与模式) -
设计方法
1)软件设计特征:需求的频繁变化
2)好的面向对象设计:应对变化,提高复用
3)设计要点:寻找变化点,在变化点处应用设计,什么时候、什么地点应用设计模式
4)重构关键技法:(采用后者)
静态—>动态
早绑定—>晚绑定
继承—>组合
编译时依赖—>运行时依赖
紧耦合—>松耦合
上述内容来自:李建忠老师《C++设计模式》视频
特别感谢:李建忠老师