【针对接口编程,而不是针对实现编程】不将变量类型声明为某个特定的具体类,而是声明为某个接口

原因

  1. 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口
  2. 减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案

理解

第一个示例中,就违背的接口原则,这里已经依赖了具体的类型了

  1. class MainForm : public Form{
  2. private:
  3. vector<Line> lineVector;
  4. vector<Rect> rectVector;
  5. vector<Circle> circleVector;
  6. }

第二个示例中:就遵循了这个原则

  1. class MainForm : public Form{
  2. private:
  3. //针对所有形状
  4. vector<Shape*> shapeVector; //这里放的就是抽象接口
  5. public:
  6. void OnPaint(const PaintEventArgs& e) {
  7. // 针对所有形状
  8. for(int i=0; i<shapeVector.size(); ++i) {
  9. shapeVector[i]->Draw(e.Graphics);
  10. //然后在处理的时候,只使用这个接口中通用的方法
  11. }
  12. }
  13. }

注释

【注释】依赖倒置原则和面向接口编程原则是相辅相成的

  1. 如果你违背了依赖倒置原则,往往就违背了针对接口编程
  2. 如果你违背了接口编程,往往就违背了依赖倒置原则

这两个原则是从不同的角度来看问题的。
有很多设计原则,都是从不同角度来看问题的,很多原则都是相辅相成的,往往违背了其中一个原则,其他几个原则也会违背。

面向接口设计的意义

【面向接口设计】面向接口设计是产业强盛的标志,即接口标准化。
任何一个强盛的产业,它们的接口一定是标准化的。接口标准化的核心其实就是分工协作。软件行业通过这种分工协作才能实现复用性。
image.png
image.png