• 1.初步了解IOC容器


    学习地址:腾讯课堂   https://ke.qq.com/course/28986?_bid=167&_wv=3&from=iosapp

    1.什么是IOC容器
      定义:
        1.是一个可以把面向细节编程方式,转变为面向抽象编程方式的第三方容器(工厂模式差不多)

        2.可以用来自动化创建对象的容器(利用DI依赖注入和配置文件的手段来实现)

      遵循依赖倒置原则:
        高层不直接依赖底层的细节,而是通过抽象来依赖,也就是所谓的把面向细节编程变为面向抽象编程

      IOC控制反转:
        把高层对底层的依赖去掉,对象的控制权转移到第三方容器,让程序更具有扩展性

      DI依赖注入:
        实现IOC的一种手段,构造对象时,把依赖的对象自动创建并传入进去

      DI依赖注入的先后顺序:
        构造函数注入-->属性注入-->方法注入

    2.为什么要用IOC容器
      面向细节编程:
        当我们面向细节编程的时候,如果细节变化了(扩展了),那么高层也需要改变,程序中往往底层的细节是容易改变的,这样会导致程序架构不稳定(往往我们的程序是不止一层的)

      面向抽象编程:
        当我们面向抽象编程的时候,如果细节变化了(扩展了),高层时不需要改变,这样阻止了程序升级时的水波效应,使程序架构更加稳定

      例如(随便举例子):

        手机类如下:

    public class Iphone 
    {
         public void Play()
         {
              Console.WriteLine("我在玩iphone");
          }
    }
    
    public class VIVO 
    {
          public void Play()
          {
               Console.WriteLine("我在玩vivo");
          }
    }

        学生类如下:

    public class Student
    {
        public void Play(IMobile iphone)
        {
             iphone.Play();
         }
    
    } 

        现在我们创建一个学生,并让学生玩iphone(面向细节)

    //我们通过买一款iphone手机玩
    public Unity_Test1()
    {
        Student stu = new Student();
        Iphone iphone = new Iphone();
        stu.Play(iphone);
    }

        到后面这个学生想玩vivo手机了,不想玩iphone,那么我们需要改低层的 Play(Iphone iphone)方法,应为它接受的是一个Iphone类型的参数,同时我们还需要改Unity_Test1类中的代码

        我们可以使用多态来解决此问题

          先定义一个接口,并让上面2款手机继承此手机接口,并把

    public interface IMobile
    {
         void Play();
    }

          代码如下(多态:里氏替换原则):

    Student stu = new Student();
    IMobile iphone = new Iphone();
    stu.Play(iphone);

          想玩vivo手机了,不想玩iphone,这下我们只需要更改  IMobile iphone = new Iphone();   此句话即可

    public Unity_Test1()
    {
         Student stu = new Student();
         IMobile iphone = new VIVO();
         stu.Play(iphone);
    }

          注意:这里还是是依赖了细节(IMobile iphone = new VIVO();),并不满足依赖倒置原则(面向抽象,而不是面向细节)

    3.如何实现依赖倒置原则

      问题:

        不依赖细节,那么我们如何创建对象呢?

      

      解决:

        把创建对象的事情交给第三方去实现

      方式如下:

        1)使用工厂模式

        2)使用IOC容器

  • 相关阅读:
    MySQL Create table as / Create table like
    Oracle CAST() 函数 数据类型的转换
    day 12
    day 11
    day 10
    day 9
    day 8
    day 7
    day 6
    day 5
  • 原文地址:https://www.cnblogs.com/zjdbk/p/10596469.html
Copyright © 2020-2023  润新知