设计模式之禅(二) -- 依赖倒置原则

2021-02-25  本文已影响0人  OakesYa

定义

程序依赖于抽象接口,不依赖于具体实现

两层含义

优劣分析

public class Driver {
    public void drive(Benz benz) {
        benz.run();
    }
}

public class Benz {
    public void run() {
        System.out.println("奔驰汽车开始运行");
    }
}

public class Client {
    public static void main(String[] args) {
        Driver zhangsan = new Driver();
        Benz benz = new Benz();
        zhangsan.drive(benz);
    }
}

public class BMW {
    public void run() {
        System.out.println("宝马汽车开始运行");
    }
}

一开始Driver买了一辆奔驰车,然后按照逻辑Driver类就有了奔驰车的驾驶能力,但是zhangsan如果新买了一辆宝马车,按照现实来说用户能开奔驰车的情况下也能开宝马车,而此时问题就在于Driver类并没有提供宝马车,如果Driver类提供的是Car抽象类而不是Benz具体类就可以了。

public interface IDriver {
    //司机就能驾驶汽车
    public void drive(ICar car);
}

public class Driver implements IDriver {
    public void drive(ICar car) {
        car.run();
    }
}

public interface ICar {
    void run();
}

public class Benz implements ICar{
    @Override
    public void run() {
        System.out.println("奔驰汽车开始运行");
    }
}

public class BMW implements ICar {
    @Override
    public void run() {
        System.out.println("宝马汽车开始运行");
    }
}

public class Client {
    public static void main(String[] args) {
        Driver zhangsan = new Driver();
        Benz benz = new Benz();
        zhangsan.drive(benz);

        BMW bmw = new BMW();
        zhangsan.drive(bmw);
    }
}

我们只需要对Driver和Car进行一下抽象就能很好的解决上面的问题,并且zhangsan可以继续买各种车进行驾驶了。

2:两个类之间有依赖关系,只要制定出两者之间的接口就可以独立开发,并且项目之间的单元测试可以独立开发,典型应用就是TDD(测试驱动开发)

上一篇 下一篇

猜你喜欢

热点阅读