Unity设计模式---依赖倒置模式---3

25 阅读2分钟

依赖倒置原则

抽象(接口与抽象类)不应该依赖细节(具体实现的类),细节应该依赖抽象。
意为:要针对接口编程,不要对实现编程。

定义:高层模块不应该依赖底层模块,它们都应该依赖于抽象。抽象不应该依赖细节,
而细节应该依赖于抽象。

依赖倒置原则的中心思想是面向接口编程。

面向过程开发时,为了使用代码可以复用,一般会把常用代码协程函数的程序集,做新项目时,调用底层
函数即可,这就是高层模块依赖底层模块。依赖倒置原则基于这样的事实:
《《《相对于细节的多变性,抽象的东西要稳定得多,以抽象为基础搭建起来的架构
比以细节为基础搭建起来的架构要稳定得多。》》》
如果高层模块和底层模块都依赖于抽象,即依赖于接口或抽象类,只要接口稳定,则任何一个更改都不用
担心其它受到影响,则高层模块和底层模块都可以容易被复用。

实现开闭原则得关键是抽象化,并且从抽象化中导出具体化实现。如果说开闭化原则是面向对象设计得目标的话,那么依赖倒置原则就是面向对象设计的主要手段。

耦合的分类

类之间的耦合

  • 零耦合关系
  • 具体耦合关系
  • 抽象耦合关系(接口和抽象类)

依赖倒置原则要求客户端依赖于抽象耦合,以抽象方式耦合是依赖倒置原则的关键。

依赖倒置原则案例

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();



        }
    }
}