【针对接口编程,而不是针对实现编程】不将变量类型声明为某个特定的具体类,而是声明为某个接口
原因
- 客户程序无需获知对象的具体类型,只需要知道对象所具有的接口
- 减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案
理解
第一个示例中,就违背的接口原则,这里已经依赖了具体的类型了
class MainForm : public Form{
private:
vector<Line> lineVector;
vector<Rect> rectVector;
vector<Circle> circleVector;
}
第二个示例中:就遵循了这个原则
class MainForm : public Form{
private:
//针对所有形状
vector<Shape*> shapeVector; //这里放的就是抽象接口
public:
void OnPaint(const PaintEventArgs& e) {
// 针对所有形状
for(int i=0; i<shapeVector.size(); ++i) {
shapeVector[i]->Draw(e.Graphics);
//然后在处理的时候,只使用这个接口中通用的方法
}
}
}
注释
【注释】依赖倒置原则和面向接口编程原则是相辅相成的
- 如果你违背了依赖倒置原则,往往就违背了针对接口编程
- 如果你违背了接口编程,往往就违背了依赖倒置原则
这两个原则是从不同的角度来看问题的。
有很多设计原则,都是从不同角度来看问题的,很多原则都是相辅相成的,往往违背了其中一个原则,其他几个原则也会违背。
面向接口设计的意义
【面向接口设计】面向接口设计是产业强盛的标志,即接口标准化。
任何一个强盛的产业,它们的接口一定是标准化的。接口标准化的核心其实就是分工协作。软件行业通过这种分工协作才能实现复用性。