C# 之 利用接口实现依赖反转

当我们在一个类中定义另一个类时,这就形成了耦合,通过具体的逻辑这种耦合可大可小,我们可以利用接口来解除这种不必要的耦合性,如下所示,这是没有使用接口的情况:

class Car
{
    public void SayHello()
    {
        Console.WriteLine("Hello, I'm is Car!!!");
    }
}

class Truck
{
    public void SayHello()
    {
        Console.WriteLine("Hello, I'm is Truck!!!");
    }
}

class Driver
{
    public Car car { get; set; }

    public Driver(Car ccar)
    {
        car = ccar;
    }

    public void SayHello()
    {
        car.SayHello();
    }
}

在上面的代码中,我们在 Driver(司机)类中定义了一个 Car(小汽车)类,司机之所以被称为司机,是因为他有自己的小汽车,但是当司机的小汽车坏了时,这个司机就不是一个司机了,我们还有检查小汽车的问题出现在哪里,而且上面我定义了一个 Truck(卡车)类,如果司机想要开这个卡车,那么我们就要重构一下这个Driver类,这就是一个大问题了,因为一个类一旦定义好,他就不应该去修改,这个耦合就非常的大,下面我们来利用接口来解除这个耦合性 . . .

新的代码如下所示:

interface IDrivingTool
{
    void SayHello();
}

class Car : IDrivingTool
{
    public void SayHello()
    {
        Console.WriteLine("Hello, I'm is Car!!!");
    }
}

class Truck : IDrivingTool
{
    public void SayHello()
    {
        Console.WriteLine("Hello, I'm is Truck!!!");
    }
}

class Driver
{
    public IDrivingTool MyCar { get; set; }

    public Driver(IDrivingTool ccar)
    {
        MyCar = ccar;
    }

    public void SayHello()
    {
        MyCar.SayHello();
    }
}

刚开始时的司机是这样的:
在这里插入图片描述
而现在我们将依赖反转之后,是这样的:

在这里插入图片描述

我们发现箭头已经反转了,测试代码如下所示:

Driver driver = new Driver(new Car());
driver.SayHello();

和第一种情况是一样的,输出为:Hello, I’m is Car!!!

但是,如果这个Car 坏了时,我们只需要这样写就行了:

Driver driver = new Driver(new Truck());
driver.SayHello();

这样我们就不需要重要去修改类了,耦合就降了许多 . . .

猜你喜欢

转载自blog.csdn.net/weixin_42100963/article/details/107598105
今日推荐