该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为:"依赖于抽象”。
该规则告诉我们,程序中所有的依赖关系都应该终止于抽象类或者接口,从而达到松耦合的目的。因为我们在应用程序中编写的大多数具体类都是不稳定的。我们不想直接依赖于这些不稳定的具体类。通过把它们隐藏在抽象和接口的后面,可以隔离它们的不稳定性。
举个例子
一个Button对象会触发Click方法,当被按下时,会调用Light对象的TurnOn方法,否则会调用Light对象的TurnOff方法。
这个设计存在两个问题:
- Button类直接依赖于Light类,这种依赖关系意味着当Light改变时,Button类会受到影响;
- Button对象只能控制Light对象,想要控制电视或者冰箱就不行了;
新的设计:
这个方案对那些需要被Button控制的对象提出了一个约束。需要被Button控制的对象必须要实现ISwitchableDevice接口。
所为原则,只是描述了什么是对的,但是并没有说清楚如何去做。在软件工程中,我们经常使用DI(依赖注入)来达到这个目的。但是提到依赖注入,人们又会经常提起IoC这个术语。所以先让我们来了解下什么是IoC。
二、IoC
IoC的全名是Inverse of Control,即控制反转。这一术语并不是用来描述面向对象的某种原则或者模式,IoC体现为一种流程控制的反转,一般用来对框架进行设计。
举个例子
ReportService是一个用来显示报表的流程,该流程包括Trim(),Clean(),Show()三个环节。
public class ReportService { private string _data; public ReportService(string data) {
_data = data;
} public void Trim(string data) {
