依赖倒置原则
抽象(接口与抽象类)不应该依赖细节(具体实现的类),细节应该依赖抽象。
意为:要针对接口编程,不要对实现编程。
定义:高层模块不应该依赖底层模块,它们都应该依赖于抽象。抽象不应该依赖细节,
而细节应该依赖于抽象。
依赖倒置原则的中心思想是面向接口编程。
面向过程开发时,为了使用代码可以复用,一般会把常用代码协程函数的程序集,做新项目时,调用底层
函数即可,这就是高层模块依赖底层模块。依赖倒置原则基于这样的事实:
《《《相对于细节的多变性,抽象的东西要稳定得多,以抽象为基础搭建起来的架构
比以细节为基础搭建起来的架构要稳定得多。》》》
如果高层模块和底层模块都依赖于抽象,即依赖于接口或抽象类,只要接口稳定,则任何一个更改都不用
担心其它受到影响,则高层模块和底层模块都可以容易被复用。
实现开闭原则得关键是抽象化,并且从抽象化中导出具体化实现。如果说开闭化原则是面向对象设计得目标的话,那么依赖倒置原则就是面向对象设计的主要手段。
耦合的分类
类之间的耦合
- 零耦合关系
- 具体耦合关系
- 抽象耦合关系(接口和抽象类)
依赖倒置原则要求客户端依赖于抽象耦合,以抽象方式耦合是依赖倒置原则的关键。
依赖倒置原则案例
namespace 依赖倒置原则
{
public interface IReader
{
string GetContent();
};
public class Book:IReader
{
public string GetContent()
{
return "这是来自书的故事";
}
}
public class NewsPaper:IReader
{
public string GetContent()
{
return "这是来自报纸的故事";
}
}
public class Mother
{
//此处体现了依赖倒置原则,依赖的是IReader这一接口,体现了接口的扩展性
public void Narrate(IReader reader)
{
Console.WriteLine("妈妈开始讲故事:");
Console.WriteLine(reader.GetContent());
}
}
internal class Program
{
static void Main(string[] args)
{
Mother mother = new Mother();
mother.Narrate(new Book());
mother.Narrate(new NewsPaper());
Console.Read();
}
}
}